2013-08-06 73 views

回答

2

我認爲最好的答案可能是在傳遞給您的視圖之前將您的Enumerable轉換爲SelectListItems,然後將該案例轉換爲TitleCase。爲你一些虛假代碼:

鑑於此數據源:

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

我有這個在我的視圖模型:

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

我設置像這樣的SelectListItems:

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 
          }; 

在我的觀點是這樣的:

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

而且我得到這個:

enter image description here

從理論上講,我認爲你也可以通過調用ToTileCase其中「文本」的說法是更改視圖的情況下,但是這將是不乾淨的,我認爲。

編輯:我修改的代碼創建SelectListItem具有值保持大寫(如電子,而不是e.ToTitleCase()) - 因爲我猜它會結合您的原始數據源最終:)

0

好的,努力提供一個小方向。如果您擁有的每個列表項,您都有一個選項。覆蓋ToString()方法。像這樣也許:

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

但是,如果你沒有自己的類你很卡住,因爲你不想修改數據源中的每個列表項。

相關問題