c# - mvc - Atributo html condicional con Html Helper
mvc label for c# (1)
Si bien puedes usar
@Html.CheckBoxFor(m => m.Property, Model.IsAuthorized ? (object)new { @class = "input-class", disabled = "disabled" } : (object)new { @class = "input-class"});
para hacer esto en una línea de código, en su caso, puede fallar el enlace del modelo.
El método CheckBoxFor()
genera 2 entradas, una casilla de verificación con value="True"
y una entrada oculta con value="False"
. En el caso en que el valor inicial de la Property
sea true
y se IsAuthorized
el resultado es que la casilla de verificación está desactivada y no publicará ningún valor. Sin embargo, la entrada oculta se enviará y se vinculará a su modelo, lo que dará como resultado que la Property
sea false
(cuando debería ser true
).
Para manejar el enlace del modelo correctamente, necesitará el bloque if
@if (Model.IsAuthorized)
{
@Html.CheckBoxFor(x => m.Property, new { @class = "input-class" })
}
else
{
@Html.HiddenFor(m => m.Property) // necessary to post back the initial value
<input type="checkbox" @(Model.Property ? "checked" : null) disabled />
}
Estoy usando un helper Html para crear una casilla de verificación. A la espera de alguna condición, deseo agregar el atributo disabled
al objeto htmlAttribute. Tengo el siguiente código:
@if (Model.IsAuthorized)
{
@Html.CheckBoxFor(x => @Model.Property, new { @class = "input-class" })
}
else
{
@Html.CheckBoxFor(x => @Model.Property, new { @class = "input-class", @disabled = "disabled" })
}
Me gustaría que este código sea más conciso. ¿Hay alguna manera de agregar condicionalmente ciertos atributos html en una línea / sin un bloque condicional?