2012-03-14 2 views
0

Y at-il une meilleure façon par rapport à @if @else Juste pour modifier quelques attributs (comme désactivé, valeur, classe, etc) de l'élément html dans la page cshtml construit avec vue Razor?MVC3 Razor View Optimisation

+0

Eh bien, je ne sais pas comment éviter "if/else". Peut-être que la syntaxe short if/else vous aidera @ (true? "Enabled": "disabled"). Autre façon de créer des valeurs d'attribut helper ou count dans le contrôleur –

Répondre

0

MVC 4/Razor V2 aura quelques améliorations:

Rendu d'attribut conditionnel

Si vous avez un attribut qui pourrait être nulle, dans le passé, vous avez besoin de faire un chèque nul pour éviter d'écrire sur un attribut vide, comme ceci:

<div @{if (myClass != null) { <text>class="@myClass"</text> } }>Content</div> 

maintenant rasoir est capable de gérer cela automatiquement, de sorte que vous pouvez simplement écrire l'attribut. Si elle est nulle, l'attribut est pas écrit:

<div class="@myClass">Content</div> 

Donc, si @myClass est null, la sortie est ceci:

<div>Content</div> 

De Jon Galloway's blog.

+0

qui serait être fonctionnalité étonnante .. comme ça :) – Aman

0

Je ne sais pas pourquoi vous pensez qu'il ya une faille de performance avec un rasoir @if mais vous pouvez utiliser votre ViewModel ou ViewBag pour cela:

<input type="text" value="@(ViewBag.TheValue)" /> 

Mais pour les meilleures pratiques, Ne pas mélanger la logique côté serveur avec la présentation. « séparé des préoccupations »


Mise à jour (Qu'est-ce que je veux dire par « distincte des préoccupations »):

Il signifie la vue devrait contenir autant que possible, balises HTML et les assistants HTML (qui vous aident simplement à écrire des balisages) uniquement. Ne mettez pas de logique dans la vue. ne réutilisez pas la même vue si elle vous fait mettre du code dedans.

+0

Je souhaite ranger le code.Je dois utiliser des instructions multiples et imbriquées sinon else qui ont généré des conflits dans 'ID' des éléments aussi. – Aman

+1

@ user1270199. Montrer du code ** réel **. On dirait que vous utilisez le rasoir dans le mauvais sens! – gdoron

+0

quand vous dites "Ne pas mélanger la logique côté serveur avec la présentation" cela signifie-t-il utiliser Viewbag.Value pour tous les attributs dynamiques? – Aman

0

Vous pouvez les transmettre dans le ViewModel en tant que valeurs true/false ou valeurs de chaîne. Par exemple -

  • tout ce qui doit être réglé dynamiquement être activé ou désactivé - vous pouvez créer un bool
  • toute classe html qui est une chaîne réglée sur l'exécution, peut être passé comme une variable de chaîne dans votre modèle de vue.

etc.

afin de nettoyer votre point de vue de rasoir de tous les @if déclarations d'autre

+0

hmm sonne comme intéressant-html.helpers pourrait être plus intéressant (j'ai vu dans google;)) – Aman

+0

je ne sais pas comment vous prévoyez d'utiliser html helpers à cette fin – MoXplod

+0

comme utilisant MvcHtmlString StatusClass pour sélectionner une classe perticular basé sur la condition .. Je ne suis pas à portée de main dans les méthodes d'extension MvcHtmlString si :( – Aman

2

vous pouvez utiliser des instructions conditionnelles en ligne ainsi:

<input type="text" value="@(true == true ? "one value" : "another value")" />