SelectList从ViewBag中提取信息:不在生成的html中创建value =“...”

时间:2013-04-05 18:53:45

标签: asp.net razor drop-down-menu selectlist

我正在尝试使用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,在我看来这应该有效。有没有人知道为什么没有为占位符以外的任何东西生成值?

谢谢!

1 个答案:

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