Asp.net mvc ASP.NET MVC 4中不一致的空属性处理
我一直在尝试处理ASP.NETMVC4中可选的HTMLAsp.net mvc ASP.NET MVC 4中不一致的空属性处理,asp.net-mvc,asp.net-mvc-4,razor,html-helper,Asp.net Mvc,Asp.net Mvc 4,Razor,Html Helper,我一直在尝试处理ASP.NETMVC4中可选的HTMLrequired和readonly属性。令我惊讶的是,我发现HTML助手中的null属性被呈现为空字符串,而它们在Razor中被完全删除(期望的行为) 例如,此代码: @{ string disabled = null; string @readonly = null; } @Html.TextBox("t1", "Value", new { disabled, @readonly }) <input type="text
required
和readonly
属性。令我惊讶的是,我发现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)" />
@{string disabled=null;string@readonly=null;}
@TextBox(“t1”,“Value”,新的{disabled,@readonly})
呈现:
<input disabled="" id="t1" name="Txt1" readonly="" type="text" value="Value" />
<input type="text" name="t2" value="Value" />
基本上我想知道的是:
- 这两种不同行为背后的原因是什么
- 有没有一种方法可以在不编写任何自定义代码的情况下使用
获得相同的结果Html.TexBox
System.Web.Mvc.Html
中的代码,该代码将属性的RouteValueDictionary
转换为实际的Html。(我相信代码在TagBuilder
中)
原始HTML标记行为来自Razor v2语言解析器中的一个功能,该功能删除Razor标记中在运行时解析为
null
的属性。是的,但仍然。。。我们期望在整个平台上对这些案例进行一致的处理。有没有办法在Html.Helpers中模仿类似的行为?@Meryovi:据我所知,没有(不修改源代码)。你可以打开一个功能请求或拉请求在我刚刚发现已经有一个功能请求那里,谢谢!