ASP.NET MVC 4中的null属性处理不一致

时间:2013-05-21 15:35:22

标签: asp.net-mvc asp.net-mvc-4 razor html-helper

我一直在尝试处理ASP.NET MVC 4中的可选HTML requiredreadonly属性。令我惊讶的是,我发现HTML帮助程序中的null属性呈现为在Razor中完全删除它们时出现空字符串(所需行为)。

例如,此代码:

  @{ string disabled = null; string @readonly = null; }

  @Html.TextBox("t1", "Value", new { disabled, @readonly })
  <input type="text" name="t2" value="Value" disabled="@disabled" readonly="@(@readonly)" />

渲染:

  <input disabled="" id="t1" name="Txt1" readonly="" type="text" value="Value" />
  <input type="text" name="t2" value="Value" />

基本上我想知道的是:

  • 这两种不同行为背后的原因是什么?
  • 有没有办法在不编写任何自定义代码的情况下使用Html.TexBox获得相同的结果?

修改

如果没有编写自定义Html Helper,这是不可能的,但CodePlex上有一项功能请求。

1 个答案:

答案 0 :(得分:1)

Html.TextBox()行为来自System.Web.Mvc.Html中的代码,该代码将RouteValueDictionary个属性转换为实际的HTML。 (我相信代码在TagBuilder

原始HTML标记行为来自Razor v2语言解析器中的一个功能,该功能删除Razor标记中的属性,这些属性在运行时解析为null