Conditionnel Attributs HTML à l'aide de Rasoir MVC3
La variable strCSSClass a souvent une valeur, mais il est parfois vide.
Je ne veux pas d'inclure une classe vide="" dans cette entrée de l'élément HTML, ce qui signifie que si strCSSClass est vide, je ne veux pas l'attribut class= à tous.
Ce qui suit est une façon de le faire conditionnelle d'un attribut HTML:
<input type="text" id="@strElementID" @(CSSClass.IsEmpty() ? "" : "class=" + strCSSClass) />
Est-il une façon plus élégante de le faire? Plus précisément celui où j'ai pu suivre la même syntaxe que celle utilisée dans les autres parties de l'element: class="@strCSSClass" ?
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas l'entendre de moi, l'après-midi pour un Rasoir, mais en Rasoir 2 (Pages Web 2 et MVC 4) nous aurons conditionnelle attributs construit dans de Rasoir(comme de la MVC 4 RC testé avec succès), de sorte que vous pouvez dire des choses comme ça...
Si strCSSClass est null, alors l'attribut de classe ne sont pas rendues à tous.
SSSHHH...ne le dites pas. 🙂
<td @Html.Raw( someBoolean ? "rel='tooltip' title='Drilldown' data-container='.drillDown a'" : "" )>
permettra d'éviter le rasoir d'essayer d'ajouter ses propres citations(je pense que les Rasoirs "magie" est en partie une fonction de sécurité, donc vous devez utiliser Raw pour le contourner)<span class="@(if(flag, "active"))"/>
ou quoi que ce soit avec de plus simple/fourchette/syntaxe plus courte que cela.<input type="text" data-x />
, de sorte que vous finissez par avoir à faire est une instruction conditionnelle avec 2 blocs de presque la même balise.Remarque vous pouvez faire quelque chose comme ceci(au moins dans MVC3):
Ce que j'ai cru a été remporté par l'ajout de citations, était en fait le navigateur. Comme Rism a souligné lors de l'essai avec MVC 4(je n'ai pas testé avec MVC 3, mais je suppose que le comportement n'a pas changé), ce produit
class=TopBorder
mais les navigateurs sont en mesure d'analyser cette amende. Le HTML analyseurs sont quelque peu indulgent sur les disparues de l'attribut cite, mais cela peut se briser si vous avez des espaces ou des caractères.OU
Ce qui va mal avec vos propres citations
Si vous essayez d'utiliser certains d'habitude C# conventions pour les citations imbriquées, vous vous retrouverez avec plus de citations que vous négocié parce que le Rasoir est en essayant de sortir en toute sécurité entre eux. Par exemple:
Ce devrait évaluer à
<button type="button" style="border:0px">
mais de Rasoir échappe à toute sortie de C# et produit ainsi:Vous ne verrez que si vous affichez la réponse sur le réseau. Si vous utilisez un HTML inspecteur, souvent, vous êtes en train de voir le DOM, pas le HTML brut. Les navigateurs analyser HTML dans le DOM, et l'après analyse de DOM représentation a déjà quelques subtilités appliquée. Dans ce cas, le Navigateur voit il n'y a pas de guillemets autour de la valeur de l'attribut, ajoute:
Mais dans l'inspecteur DOM HTML codes de caractères s'afficher correctement si vous en fait voir:
En Chrome, si vous faites un clic droit et sélectionnez " Modifier le code HTML, il passer de retour de sorte que vous pouvez voir ces vilaines HTML codes de caractères, ce qui montre clairement que vous avez réel extérieur des guillemets, et HTML codé intérieur des guillemets.
Donc, le problème avec le fait d'essayer de faire la citation est de vous Rasoir échappe à ces.
Si vous voulez un contrôle total de citations
Utiliser Le Langage Html.Premières pour les empêcher de citer échapper:
Rend comme:
Ci-dessus est tout à fait sûr parce que je ne suis pas sortie de code HTML à partir d'une variable. La seule variable est la condition ternaire. Cependant, méfiez-vous que cette dernière technique peut vous exposer à certains problèmes de sécurité si le bâtiment de chaînes à partir de données fournies par les utilisateurs. E. g. si vous avez construit un attribut à partir de champs de données qui proviennent de données fournies par les utilisateurs, l'utilisation de Html.Raw signifie que la chaîne peut contenir une fin prématurée de l'attribut et de la balise, puis commencer une balise de script qui fait quelque chose au nom de l'utilisateur actuellement connecté(éventuellement différent de l'utilisateur connecté). Peut-être que vous avez une page avec une liste de tous les utilisateurs des photos et que vous définissez une info-bulle le nom de chaque personne, et l'un des utilisateurs est nommé lui-même
'/><script>$.post('changepassword.php?password=123')</script>
et maintenant, de tout autre utilisateur qui consulte cette page a leur mot de passe instantanément changé un mot de passe que l'utilisateur malveillant sait.Je suppose un peu plus pratique et structurée de la façon est d'utiliser helper Html. À votre avis, il peut ressembler à:
Si de cette façon sera utile pour vous je vous recommande de définir dictionnaire
htmlAttr
dans votre modèle, de sorte que votre vue n'a pas besoin de tout@{ }
des blocs logiques (plus clair).