使用DropDownListFor与模型

时间:2012-11-30 11:42:04

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

在我的视图中,我使用列表作为我的模型,每个列表项都是model类型,所以它看起来像这样:

@model IEnumerable<UserManager.Models.vw_UserManager_Model>

我试图遍历此列表并将特定属性添加到DropDownListFor:

@for (int i = 0; i < Model.Count(); i++)
{
    Html.DropDownListFor(model => model.ElementAt(i).module, new SelectList(Model, Model.ElementAt(i).module));
}

但是当我这样做时,它不会在我的页面上呈现下拉菜单。

Image of my list in locals

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

您无法呈现模型的下拉列表,因为无法在下拉列表中完整地表示模型。 ASP.NET应该呈现什么?

如果要从列表中选择模型,可以执行的操作是在列表上运行LINQ Select查询,从而创建IEnumerable<SelectListItem>,如下所示:

var selectList = Model
    .Select(x => new SelectListItem
    {
        Name = x.module_name,
        Value = x.module
    });

我尝试从您发布的屏幕截图中获取值。如果我犯了错误,请道歉。你明白了......

此代码的作用是遍历对象类型(Model.Select)的集合,并返回SelectListItem的集合。如果您不熟悉LINQ,则需要将Select视为变革函数。它需要一个集合,并为每个元素将其转换为其他元素并返回结果。在这里,它采用Model集合的每个元素并创建SelectListItem。然后它返回IEnumerable<SelectListItem>

要在页面上呈现列表,请执行以下操作:

@Html.DropDownListFor(Model.MyValue, selectList)

...其中Model.MyValue是接收所选值的变量(假设值modelstring,它似乎是)。