我在页面上有多个下拉列表,这些下拉列表是在运行时构建的。我有一个带有选择列表的视图模型。我试过this post这很棒,但它有点不同因为我在视图上有一个视图模型集合。我想我很接近,但我不确定如何正确使用DropDownListFor。如何使用不同的值预选每个下拉列表?
VM
public class categoryVm
{
public IEnumerable<SelectListItem> category { get; set; }
public string SelectedValue { get; set; }
}
查看
@model IEnumerable<categoryVm>
@foreach (var item in Model)
{
//i think i am missing something here???
@Html.DropDownListFor(**x => item.SelectedValue**, item.category)
}
控制器
name是StaticName之一,它就像一个Id,它在列表中。
var categories = new List<categoryVm>();
var selectlistcolumns = columns.Select(x => new SelectListItem
{
Value = x.StaticName,
Text = x.DisplayName
});
foreach (var column_loopVariable in dtCSV.Columns)
{
var category= new categoryVm();
category.category= selectlistcolumns;
category.SelectedValue = "name";
categories .Add(category);
}
return View(categories);
我更喜欢使用mvc解决方案而不是使用javascript更改dom。
答案 0 :(得分:2)
试试这个
var selectlistcolumns = columns.Select(x => new SelectListItem
{
Value = x.StaticName,
Text = x.DisplayName,
Selected = x.DisplayName == "name" // this sets the selected value
});
foreach (var column_loopVariable in dtCSV.Columns)
{
var category= new categoryVm();
category.category= selectlistcolumns;
//category.SelectedValue = "name"; // not required
categories .Add(category);
}
另外,如果您注意到Html.DropDownListFor(propExpresstion, selectList)
的签名
所以你假设的第一个参数没有设置选定的值。希望这有帮助!
答案 1 :(得分:1)
@Html.DropDownListFor(m => item.SelectedValue, new SelectList(item.category))
答案 2 :(得分:1)
由于您的控制器返回List。 您应该在视图页面中使用IList而不是IEnumerable。
@model IList<categoryVm>
for (int i = 0; i < Model.Count; i++)
{
@Html.DropDownListFor(m => Model[i].SelectedValue, Model[i].category)
}
View Model IEnumerable<> property is coming back null (not binding) from post method?