【问题标题】:ASP.NET MVC TextBoxFor helper rendering empty when nullASP.NET MVC TextBoxFor 帮助器在 null 时呈现空
【发布时间】:2011-01-26 19:14:51
【问题描述】:

我注意到如果没有模型,TextBoxFor 助手会呈现为空,例如当我有一个 CreateEdit ViewUserControl 时。在编辑视图中字段被填充时,在创建字段为空但仍呈现时。

问题是 TextBoxFor 不接受不同的 Id 作为其名称(与 LabelFor 等相同,但对于 LabelFor 我有自定义 Html 帮助器)。

所以在某些情况下我们仍然需要使用常规的 Html.TextBox 助手。问题是如果我写这个

    <%=Html.TextBox("postname", Model.PostCode.postname, new { @class = "postsDropDown" })%>

创建视图中出现错误(很明显)。

所以我必须这样做:

    <% if (Model != null) %>
    <%=Html.TextBox("postname", Model.PostCode.postname, new { @class = "postsDropDown" })%>
    <% else %>
    <%=Html.TextBox("postname", null, new { @class = "postsDropDown" })%>

现在这是我不再喜欢的东西(IF)。

这是唯一的方法吗?我知道我也可以扩展 TextBoxFor 助手,但似乎很麻烦。最后,我们将扩展所有“For”助手,但我认为这应该由 ASP.NET MVC 团队完成(内置)。

【问题讨论】:

  • 请帮助我了解帮助者如何解决问题,因为目前在当前情况下,问题是在评估 Model.PostCode 时,因为 Model 为空。因此,即使我们编写了一个助手,然后如果我们仍在使用 Model.PostCode,它也会在调用助手之前引发评估错误。
  • 在我看来,这是您的设计问题。模型应该没有理由为空。
  • @matt:当我们在创建视图中时,模型显然为空,因为我们正在创建实体的新实例。我看不出这有什么不同。我猜,为模型提供一个空对象将是设计问题。
  • @nitin:我们可以检查帮助程序中的模型属性并进行相应的渲染。
  • @mare,只是谷歌的开源 asp.net mvc 应用程序。将 null 作为模型传递给强类型视图是没有意义的。因此,您只是不这样做。如果您不希望视图使用特定模型,则不应对其进行强类型化。但如果它是强类型的,则视图必须假定它不为空。

标签: asp.net-mvc


【解决方案1】:

如果Modelnull,那么尝试访问Model.PostCode.postname 将抛出NullReferenceException,所以我认为您无法在TextBoxFor 中修复它。你可以尝试做类似Model != null &amp;&amp; Model.PostCode != null ? Model.PostCode.postname : null 的事情,但这很讨厌:-(

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多