Si bien Microsoft ha creado una representación automática de los atributos html en la maquinilla de afeitar MVC4, me llevó bastante tiempo descubrir cómo representar una segunda clase css en un elemento, basada en una expresión de maquinilla condicional. Me gustaría compartirlo contigo.
Basado en una propiedad de modelo @ Model.Details, quiero mostrar u ocultar un elemento de la lista. Si hay detalles, se debe mostrar un div; de lo contrario, se debe ocultar. Usando jQuery, todo lo que necesito hacer es agregar un show u ocultar clase, respectivamente. Para otros fines, también quiero agregar otra clase, "detalles". Entonces, mi margen de beneficio debería ser:
<div class="details show">[Details]</div>
o <div class="details hide">[Details]</div>
A continuación, muestro algunos intentos fallidos (marcado resultante suponiendo que no hay detalles).
Este: <div @(@Model.Details.Count > 0 ? "class=details show" : "class=details hide")>
,
esto hará que: <div class="details" hide="">
.
Esta: <div @(@Model.Details.Count > 0 ? "class=\"details show\"" : "class=\"details hide\"")>
.
esto hará que: <div class=""details" hide"="">
.
Esta: <div @(@Model.Details.Count > 0 ? "class='details show'" : "class='details hide'")>
esto hará que: <div class="'details" hide'="">
.
Ninguno de estos son marcas correctas.
fuente
Respuestas:
Creo que todavía puede haber una lógica válida en las vistas. Pero para este tipo de cosas estoy de acuerdo con @BigMike, es mejor colocarlo en el modelo. Dicho esto, el problema se puede resolver de tres maneras:
Su respuesta (suponiendo que esto funcione, no lo he intentado):
Segunda opción:
Tercera opción:
fuente
The "div" element was not closed
'ClubsModel' does not contain a definition for 'ClubsFilter' and no extension method 'ClubsFilter' accepting a first argument of type 'ClubsModel' could be found (are you missing a using directive or an assembly reference?)
Esta:
renderizará esto:
y es el marcado que quiero.
fuente
@Model.Details.Count > 0
. por ejemplo<div class="details @(@Model.HasDetails ? "show" : "hide")">
Puede agregar propiedades a su modelo de la siguiente manera:
y luego su vista será más simple y no contendrá ninguna lógica:
Esto funcionará incluso con muchas clases y no representará la clase si es nula:
con 2 propiedades no nulas representará:
si class1 es nulo
fuente
Puede usar la función String.Format para agregar una segunda clase según la condición:
fuente