net mvc for dropdownlist asp c# asp.net-mvc razor html-helper

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?