2012-11-30 58 views
1

在我看来,我用一个列表作为我的模型和各列表项的类型为模型的,所以它看起来是这样的:使用DropDownListFor与模型

@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)); 
} 

但是当我这样做不会使我的网页上dropdownmenu。

Image of my list in locals

有人能帮忙吗?

回答

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,这它似乎是)。

+0

我无法让您的代码正常工作。 selectList在当前上下文中不存在。我错过了什么吗? –

+0

'selectList'是我在第一个代码块中定义的'IEnumerable “!你需要先做一点。 –

+0

我感到困惑,因为我是使用LINQ的新手。如果在我的视图中,我的模型是一个列表集合,该集合中的每个项目都有一个对象,并且每个对象都具有带有值的模块属性。我如何循环访问这个集合并获取模块值? –

相关问题