也许这个问题已被提出,但我找到的答案并不清楚。
我想选择下拉列表的默认值。 我有一个国家列表,并根据区域代码通过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>();
}
}
谢谢。
答案 0 :(得分:1)
我打算将此作为评论添加,但是篇幅太长,如果我有帮助,你可以接受这个作为答案。
这是我用来实现这个的方法;
首先,在viewmodel中我有以下
public int FooID { get; set; }
public IEnumerable<SelectListItem> FooList { get; set; }
FooID既是默认值(或当前选中的),也是用于收集结果的属性。
我有一个构建FooList的函数,它返回的类型 列表,使用每种项目的格式:
new SelectListItem { Text = i.Name, Value = i.FooID.ToString() };
在输出viewmodel之前,当前值被插入到FooID中,或者如果这是一个新项目,我通常会将值设置为1,即默认值。
然后输出;
@Html.DropDownListFor(m => m.FooID, Model.FooList)
请记住,FooID将作为字符串传递,因此需要将其作为字符串FooID参数收集,并转换为Int。只要在将viewmodel从控制器传递给视图之前设置FooID,FooList中其值等于FooID的项将被设置为默认值...例如;
public ActionResult MyAction()
{
MyVM vm = new MyVM();
vm.FooID = 1;
vm.FooList = FunctionToGenerateFooList();
return View(vm);
}
答案 1 :(得分:0)
实际上,您应该将下拉列表作为包含SelectListItem的列表传递。然后,对于每个国家/地区,将文本作为国家/地区代码,并为其分配值。然后,在初始化模型时,收集文化,并找到列表中的哪个项目具有匹配的文本
Thread.CurrentThread.CurrentUICulture.Name;
并将其value属性分配给SelectedAnswer。