Bien que Microsoft ait créé un rendu automatique des attributs html dans razor MVC4, il m'a fallu un certain temps pour découvrir comment rendre une deuxième classe css sur un élément, basée sur une expression de rasoir conditionnelle. J'aimerais le partager avec toi.
Basé sur une propriété de modèle @ Model.Details, je souhaite afficher ou masquer un élément de liste. S'il y a des détails, un div doit être affiché, sinon, il doit être masqué. En utilisant jQuery, tout ce que j'ai à faire est d'ajouter une classe show ou hide, respectivement. Pour d'autres raisons, je souhaite également ajouter une autre classe, "détails". Donc, ma majoration devrait être:
<div class="details show">[Details]</div>
ou <div class="details hide">[Details]</div>
Ci-dessous, je montre quelques tentatives infructueuses (le balisage résultant en supposant qu'il n'y a pas de détails).
Ce: <div @(@Model.Details.Count > 0 ? "class=details show" : "class=details hide")>
,
rendra ceci: <div class="details" hide="">
.
Ceci: <div @(@Model.Details.Count > 0 ? "class=\"details show\"" : "class=\"details hide\"")>
.
rendra ceci: <div class=""details" hide"="">
.
Ce: <div @(@Model.Details.Count > 0 ? "class='details show'" : "class='details hide'")>
rendra ceci: <div class="'details" hide'="">
.
Aucun de ces éléments n'est une majoration correcte.
la source
Réponses:
Je crois qu'il peut encore y avoir une logique valable sur les vues. Mais pour ce genre de choses je suis d'accord avec @BigMike, il est mieux placé sur le modèle. Cela dit, le problème peut être résolu de trois manières:
Votre réponse (en supposant que cela fonctionne, je n'ai pas essayé ceci):
Deuxième option:
Troisième option:
la source
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?)
Ce:
rendra ceci:
et c'est la majoration que je veux.
la source
@Model.Details.Count > 0
. par exemple<div class="details @(@Model.HasDetails ? "show" : "hide")">
Vous pouvez ajouter une propriété à votre modèle comme suit:
et alors votre vue sera plus simple et ne contiendra aucune logique:
Cela fonctionnera même avec de nombreuses classes et ne rendra pas la classe si elle est nulle:
avec 2 propriétés non nulles rendra:
si class1 est nul
la source
Vous pouvez utiliser la fonction String.Format pour ajouter une deuxième classe en fonction de la condition:
la source