2011-06-06 5 views
0

Dans un site Web ASP.NET MVC 3 J'ai vue avec le code suivant (Razor):chaîne à DropDownList dans ASP.NET MVC

@Html.DropDownList("SessionYear", new SelectList(ViewBag.SessionYears as System.Collections.IEnumerable, "", "", Model.SessionYear), String.Empty) 

ViewBag.SessionYears est un IEnumerable<int>.

La sortie est quelque chose comme ceci:

<select id="SessionYear" name="SessionYear"><option value=""></option> 
    <option>2013</option> 
    <option selected="selected">2012</option> 
    <option>2011</option> 
    <option>2010</option> 
</select> 

C'est grand, cependant, ce que je voudrais faire maintenant est d'ajouter un peu de texte dans le texte affiché dans la liste déroulante, donc chaque option ressemble un peu à ceci:

<option>2013-2014</option> 
<option selected="selected">2012-2013</option> 

J'ai essayé de jouer avec les différentes options, mais aucun ne travaille, et je l'ai épuisé les surcharges. Est-ce que je peux le faire avec l'assistant DropDownList, ou dois-je l'implémenter d'une manière différente?

EDIT: Et tandis que je pourrais probablement convertir des années de session en un objet qui a un int et une chaîne pour résoudre ceci, je préférerais ne pas le faire. Mais si c'est ce que je dois faire, c'est ce que je ferai.

EDIT 2:

Le code que vous attendriez à travailler est:

@Html.DropDownList("SessionYear", new SelectList(ViewBag.SessionYears as System.Collections.IEnumerable, "", (Model.SessionYear + "-" + (Model.SessionYear + 1)), Model.SessionYear), String.Empty) 

Cependant, je reçois l'erreur suivante:

DataBinding: 'System.Int32' does not contain a property with the name '2012-2013'. 

Ce que je suppose est logique, puisque Model.SessionYear est un int. C'est aussi pourquoi je pense que je dois créer un nouvel objet qui contient SessionYear comme un int et une autre propriété qui contient (SessionYear + "-" + (SessionYear + 1)) (comme je l'ai fait dans le passé avec d'autres modèles).

Mais je m'attendrais à ce qu'il y ait un moyen plus facile.

Répondre

0

Je ne suis pas sûr de bien comprendre la question mais pourquoi ne configurez-vous pas dataValueField et dataTextField?

construire Peut-être quelque chose comme votre SelectList ceci:

@Html.DropDownList("SessionYear", new SelectList(ViewBag.SessionYears as System.Collections.IEnumerable, Model.SessionYear, Convert.ToChar(Model.SessionYear) + Convert.ToChar(Model.SessionYear + 1), Model.SessionYear), String.Empty) 
+0

En fait, le Model.SessionYear pour le deuxième pourrait rester comme param « », et ce n'est pas exactement ce que je cherche. Je vais modifier ma question avec le code que j'ai essayé, et je m'attendais à travailler, ainsi que l'erreur. –