2013-05-21 27 views
0

我一直在尝试处理ASP.NET MVC 4中的可选HTML requiredreadonly属性。令我惊讶的是,我发现HTML助手中的null属性呈现为空字符串而它们在剃刀中完全去除(理想行为)。在ASP.NET MVC中不一致的空属性处理4

例如,下面的代码:

@{ 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帮助,但有这个功能请求上CodePlex

回答

1

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

原始HTML标记行为来自Razor v2语言分析器中的一项功能,该功能会删除剃刀标记中的属性,并在运行时解析为null

+0

是的,但仍然......人们会期望在整个平台上对这些情况进行一致的处理。有没有一种方法可以模仿Html.Helpers中的类似行为? – Meryovi

+0

@Meryovi:不是我所知道的(没有修改源代码)。您可以在http://aspnetwebstack.codeplex.com/ – SLaks

+0

上打开功能请求或拉取请求。我刚刚发现那里已经有一项功能请求,谢谢! – Meryovi