如何预选MVC Dropdownlist?

时间:2014-04-02 09:20:32

标签: c# asp.net asp.net-mvc html.dropdownlistfor

我在页面上有多个下拉列表,这些下拉列表是在运行时构建的。我有一个带有选择列表的视图模型。我试过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。

3 个答案:

答案 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?