【问题标题】:SelectList returns as null in MVC DropDownListSelectList 在 MVC DropDownList 中返回为 null
【发布时间】: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


【解决方案1】:

想通了,感谢this link。事实证明,当表单被发送回服务器时,验证实际上是在我的控制器上进行的,但是如果验证失败,控制器会尝试重新显示表单。但是,SelectLists 已在某处设置回 null,因此我还必须在该页面上重新创建 SelectLists。

我不确定这是 MVC 中的错误还是我自己的错误,但作为参考,有解决方案。干杯。

【讨论】:

    【解决方案2】:

    这不是 MVC 中的错误,而是设计使然 (AFAIK)

    您需要重新设置视图数据并将模型返回到视图。

    视图数据只存在于当前请求+1(即回发)。

    【讨论】:

    • 对了。谢谢你的信息。我想知道为什么这在 beta 1 MVC 中从来不是问题?
    • 验证模型从 beta 更改为 RC。
    【解决方案3】:

    您是否重新升级到 RC1 刷新?

    http://www.haacked.com/archive/2009/01/30/aspnetmvc-refresh.aspx

    他们解决了很多问题。我几乎 100% 确定我在升级到刷新之前遇到过类似的错误。

    忍者戴夫​​p>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-17
      • 1970-01-01
      • 2016-05-07
      • 2021-08-06
      • 1970-01-01
      • 1970-01-01
      • 2011-11-27
      • 2017-09-18
      相关资源
      最近更新 更多