1

我正在尝试使用 Razor 视图引擎在 MVC4 应用程序中创建经过客户端验证的下拉列表。

视图中生成下拉列表的代码如下:

 @Html.DropDownList("Test", new SelectList(ViewBag.AvailableLoBsDescriptions, ViewBag.AvailableLoBsIds), "--none--")

请注意,ViewBag.AvailableLoBsDescriptions 是使用 IList 在控制器中创建的,而 ViewBag.AvailableLoBsIds 也是使用 IList 在控制器中创建的。

我期望发生的是让 Razor 生成一个下拉菜单,其中描述填充每个的内部 html,而 Ids 填充 value="..."。但是,根本没有产生任何价值,导致这样的事情:

<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在我看来这应该可行。有谁知道为什么除了占位符之外没有为其他任何东西生成值?

谢谢!

4

1 回答 1

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--")

等等...

<select id="Test" name="Test">
    <option value="">--none--</option>
    <option value="myValue">Option text</option>
</select>
于 2013-04-05T19:07:08.393 回答