2013-08-06 2 views

Répondre

2

Je pense que la meilleure réponse pourrait être de convertir votre Enumerable en SelectListItems avant de passer à votre vue, et en convertissant le cas en TitleCase alors. Certains code faux pour vous:

Compte tenu de cette DataSource:

EnumerableItems = new List<string>() { "ITEM ONE", "ITEM TWO" }; 

je sur mon ViewModel:

public string BoundValue { get; set; } 
public IEnumerable<SelectListItem> SelectListItems { get; set; } 

Je mets les SelectListItems comme ceci:

viewModel.SelectListItems = from e in EnumerableItems 
          select new SelectListItem 
          { 
           Selected = e == dto.BoundValue, 
           Text = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(e.ToLower()), 
           Value = e 
          }; 

En mon point de vue quelque chose comme:

@Html.DropDownList("BoundValue", new SelectList(Model.SelectListItems, "Value", "Text"), "-- select --") 

Et je reçois ceci:

enter image description here

En théorie, je pense que vous pouvez également changer le cas dans la vue en appelant le ToTileCase où l'argument « Texte » est, mais ce serait moins propre que je pense .

EDIT: Je modifié le code pour la création du SelectListItem d'avoir la valeur restent en majuscules (comme e, au lieu de e.ToTitleCase()) - puisque je suppose que cela va se lier à votre source de données d'origine en fin de compte :)

0

Bon, dans le but de fournir un peu de direction. Si vous possédez la classe est chaque élément de liste que vous avez une option. Remplacer la méthode ToString(). Comme cela peut-être:

public override string ToString() 
{ 
    // here is a really primitive algorithm 
    return string.Format("{0}{1}", 
     this.DisplayProperty.Take(1), 
     this.DisplayProperty.Substring(1).ToLower()); 
} 

Cependant, si vous ne possédez pas la classe qui est chaque élément de la liste que vous êtes assez coincé parce que vous ne voulez pas modifier la source de données.

Questions connexes