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 № 1o 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.