2011-02-14 48 views
0

我有一個下拉菜單,我有,看起來像數據填充....回到文本從下拉MVC

List<SelectListItem> items = new List<SelectListItem>(); 
     items.Add(new SelectListItem 
     { 
      Text = "Some Name", 
      Value = "1" 
     }); 

下拉是這樣

<%: Html.DropDownList("Nick", ViewData["Nick"] as SelectList, new { @onchange = "this.form.submit()" })%> 

這成功返回「值」財產我的行動方法,我想返回「文本」屬性。我怎麼做?

回答

2

'text'不被返回。它只是通過定義返回值(這是HTML這樣做)。您可以交換它,以便它僅通過將值內的內容交換爲「某個名稱」來返回文本。

List<SelectListItem> items = new List<SelectListItem>(); 
items.Add(new SelectListItem 
{ 
    Text = "Some Name", 
    Value = "Some Name" 
}); 

更有可能的是,您可能會發現,最好使用您發回給您的密鑰來獲取該值。鬆散地說,像這樣的僞(-esque)代碼。

[HttpPost] 
public ActionResult Edit(EditViewModel viewModel) 
{ 
    var listOfOptions = GetListOfOptions(viewModel.Nick); 
    string selectedOptionText = listOfOptions.Text; 
} 
0

如果你需要這樣做,這意味着你做錯了什麼。通常情況下,呈現包含此下拉列表的視圖的控制器已填充爲ViewData["Nick"](它應該填充視圖模型而不是ViewData,但這是另一個討論)。所以控制器已經知道值和文本之間的映射。所以當你回傳價值時,你應該可以用你以前使用的相同技術來確定文本。

+0

爲什麼這被低估? downvoting時請留言。 – 2011-02-15 15:34:29

0

也許他正在經歷同樣的問題。有時候您必須使用ViewData[]和其他資源,因爲您的模型包含另一個與您的ViewData[]對象完全不同的對象,並且框架標準代碼不太有用,有時這些研究案例需要在默認框架代碼中進行自定義。類似於控制器依賴注入。