【发布时间】:2014-08-12 01:27:35
【问题描述】:
我在 MVC RC1 表单上使用 Html.DropDownList 帮助程序时遇到问题。
在控制器类中,我创建一个这样的 SelectList
SelectList selectList = new SelectList(db.SiteAreas, "AreaId", "AreaName");
ViewData["AreaId"] = selectList;
或者像这样
IEnumerable<SelectListItem> areaList =
from area in db.SiteAreas
select new SelectListItem
{
Text = area.AreaName,
Value = area.AreaId.ToString(),
Selected = false
};
ViewData["AreaId"] = areaList;
然后使用此调用将其添加到查看器中
<% using (Html.BeginForm())
{ %>
<label for="sitearea">Site Area:</label>
<span class="hint">The menu option to be highlighted when the page is open </span>
<br />
<%= Html.DropDownList("sitearea", (SelectList)ViewData["AreaId"], "Select Area Id")%>
<%= Html.ValidationMessage("sitearea") %>
<br />
<br />
<input type="submit" value="Add New Page" />
<% = Html.AntiForgeryToken() %>
<% } %>
所以我也在下拉列表中添加了一个默认选项。如果我运行此页面并单击提交按钮而不执行任何操作,我希望此页面的 POST 操作会触发,并且此下拉列表中的验证代码会告诉我我没有选择选项。
相反,(在将 MVC 源代码附加到我的项目后),我发现我在 selectextensions.cs 中收到了 ArgumentNullException。
$exception {"Value cannot be null.\r\nParameter name: selectList"} System.Exception {System.ArgumentNullException}
这与称为 SelectInternal 的方法有关,该方法期望其 selectList 参数的值不是 null。
private static string SelectInternal(this HtmlHelper htmlHelper, string optionLabel, string name, IEnumerable<SelectListItem> selectList, bool usedViewData, bool allowMultiple, IDictionary<string, object> htmlAttributes)
{
if (String.IsNullOrEmpty(name)) {
throw new ArgumentException(MvcResources.Common_NullOrEmpty, "name");
}
if (selectList == null) {
throw new ArgumentNullException("selectList");
}
.. rest of method ..
现在我所做的只是将代码从 MVC beta 1 升级到 RC1,然后突然出现了这种情况。我以前见过对此 SelectInternal 方法的引用,但没有具体的解决方案。那么谁能帮我弄清楚为什么会发生这个错误以及如何解决它?
提前致谢
【问题讨论】:
标签: asp.net-mvc