0

也许这个问题已经被问过了,但我找到的答案并不清楚。

我想选择我的下拉列表的默认值。我有一个国家列表,并根据通过 Thread.CurrentThread.CurrentCulture 检索的区域代码,我想选择用户所在的国家/地区。

是否可以通过我的方法:

看法

@model Question
@Html.DropDownListFor(b => b.SelectedAnswer,new SelectList(Model.Answers,"ID","Country"))

模型

 public class Question
    {

        public int ID { get; set; }
        public string Country { get; set; }

        public List<Answer> Answers { get; set; }
        [Required]
        public int SelectedAnswer { get; set; }
        public int Order { get; set; }

        public Question()
        {
            Answers = new List<Answer>();
        }
    }

谢谢你。

4

2 回答 2

1

我打算将此添加为评论,但长度太长,如果我有帮助,您可以接受这个作为答案。

这是我用来实现它的方法;

首先,在视图模型中,我有以下内容

public int FooID { get; set; }
public IEnumerable<SelectListItem> FooList { get; set; }

FooID 既是默认值(或当前选择),也是用于收集发布结果的属性。

我有一个函数来构建 FooList,它返回 List 的类型,对每个项目使用这种格式:

new SelectListItem { Text = i.Name, Value = i.FooID.ToString() };

在输出viewmodel之前,会将当前值插入到FooID中,或者如果这是一个新的item,我一般会将值设置为1,即默认值。

然后为输出;

@Html.DropDownListFor(m => m.FooID, Model.FooList)

请记住,FooID 将作为字符串传递,因此需要作为字符串 FooID 参数收集,并转换为 Int。只要在视图模型从控制器传递给视图之前设置了FooID,FooList中值等于FooID的项就会被设置为默认值……例如;

public ActionResult MyAction()
    {
        MyVM vm = new MyVM();
        vm.FooID = 1;
        vm.FooList = FunctionToGenerateFooList();

        return View(vm);
    }
于 2013-03-02T15:24:01.283 回答
0

确实,您应该将下拉列表作为包含 SelectListItem 的列表传递。然后对于每个国家,将文本作为国家代码并在值内为其分配一个 id。然后,当您初始化模型时,收集文化,并找到列表中的哪个项目具有匹配的文本

    Thread.CurrentThread.CurrentUICulture.Name; 

并将其 value 属性分配给 SelectedAnswer。

于 2013-03-01T11:40:45.830 回答