我正在尝试使用Razor视图引擎在MVC4应用程序中创建一个客户端验证的下拉列表。
生成下拉列表的视图中的代码如下:
@Html.DropDownList("Test", new SelectList(ViewBag.AvailableLoBsDescriptions, ViewBag.AvailableLoBsIds), "--none--")
请注意,使用IList在控制器中创建ViewBag.AvailableLoBsDescriptions,同时使用IList在控制器中创建ViewBag.AvailableLoBsIds。
我期望发生的是让Razor生成一个下拉菜单,其中描述填充每个内部html,而Ids填充值=“...”。但是,根本没有生成任何值,导致类似这样的事情:
<select id="Test" name="Test"><option value="">--none--</option>
<option>N/A</option>
<option>aaaa</option>
<option>bbbb</option>
<option>cccc</option>
<option>dddd</option>
<option>eeee</option>
<option>ffff</option>
</select>
查看SelectList文档http://msdn.microsoft.com/en-us/library/system.web.mvc.selectlist%28v=vs.108%29.aspx,在我看来这应该有效。有没有人知道为什么没有为占位符以外的任何东西生成值?
谢谢!
答案 0 :(得分:1)
您使用的构造函数如下所示:
SelectList(IEnumerable, Object)
此处的第二个参数指示第一个参数中集合中当前选择的对象。它没有规定要用作值列表的对象。
您应该做的是使用SelectList(IEnumerable, String, String)
。这允许您传递属性的名称(IEnumerable
的每个元素的名称)以用于描述,一个属性用于值。然后你可以产生这样的东西:
<强>控制器:强>
// Create your IEnumerable
var LoBs = new List<LoB>();
// Assign some parameters to your objects
var exampleItem = new LoB();
exampleItem.Description = "Option text";
exampleItem.Value = "myValue";
// Populate your list and return your view.
LoBs.Add(exampleItem);
ViewBag.LoBs = LoBs;
return View();
查看:强>
@Html.DropDownList("Test",
new SelectList(ViewBag.LoBs, "Value", "Description"),
"--none--")
Et瞧...
<select id="Test" name="Test">
<option value="">--none--</option>
<option value="myValue">Option text</option>
</select>