2008-11-27 6 views
1

Je dois ajouter des attributs de classe & conditionnels désactivés à un élément de formulaire déroulant. J'ai ce qui suit cependant il n'écrit pas l'un ou l'autre des attributs dans n'importe quel état. Y a-t-il un moyen de contourner ceci.Attributs conditionnels - Asp.Net MVC View

<%= Html.DropDownList("--Choose Make--", "models", ViewData["model_disabled"] == "false" ? new { @disabled = "disabled", @class = "test" } : null)%> 

Répondre

2

Le problème est:

ViewData["model_disabled"] == "false" 

Le retour de ViewData [] est l'objet. Appeler == avec deux objets compare leur identité (c'est-à-dire, sont-ils exactement la même instance d'objet), et non leur égalité (c'est-à-dire, les chaînes ont-elles la même valeur).

Vous pouvez essayer ceci:

((string)ViewData["model_disabled"]) == "false" 

Edit:

Une syntaxe un peu plus propre est disponible avec les extensions MvcContrib vidéotex:

ViewData.Get<string>("model_disabled") == "false" 

Bien que cela se sent un peu plus propre , vous remarquerez aussi que c'est un peu plus long. :-p

+0

Bravo Brad, c'est le meilleur moyen? Pas sûr que j'aime vraiment la lisibilité du tout. – redsquare

+0

Je suis tombé sur quelque chose de similaire aujourd'hui, et j'ai découvert une autre syntaxe: * false.Equals (ViewData ["model_disabled"]) *. Bien que la syntaxe puisse sembler un peu étrange au début, elle est également concise et vous obtenez une vérification de la valeur "automatique" sans avoir à recourir à des choses comme encoder votre booléen dans des chaînes ou utiliser des frameworks. À votre santé. –

Questions connexes