/ Manipulação de atributos nulos inconsistentes no ASP.NET MVC 4 - asp.net-mvc, asp.net-mvc-4, navalha, html-helper

Manipulação de atributos nulos inconsistentes no ASP.NET MVC 4 - asp.net-mvc, asp.net-mvc-4, navalha, html-helper

Eu tenho tentado lidar com HTML opcional required e readonly atributos no asp.net MVC 4. Para minha surpresa, descobri que null os atributos nos ajudantes HTML são renderizados como sequências vazias enquanto são removidos completamente no Razor (comportamento desejado).

Por exemplo, este código:

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

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

Renders:

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

Basicamente, o que eu quero saber é:

  • Qual é a razão por trás desses dois comportamentos diferentes?
  • Existe uma maneira de obter o mesmo resultado usando Html.TexBox sem escrever nenhum código personalizado?

EDITAR

Isso não é possível sem escrever um Html Helper personalizado, mas há uma solicitação de recurso para isso em CodePlex.

Respostas:

1 para resposta № 1

o Html.TextBox() comportamento vem do código em System.Web.Mvc.Html que transforma um RouteValueDictionary de atributos em HTML real. (Eu acredito que o código está em TagBuilder)

O comportamento da tag HTML bruta vem de um recurso no analisador de linguagem do Razor v2 que remove atributos na marcação Razor que são resolvidos para null em tempo de execução.