【发布时间】: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