2012-06-14 74 views
6

我有一個模型:獲取文本.... MVC3

public class DocumentModel 
{ 
    public int TypeID { get; set; } 
    public List<SelectListItem> DocumentTypes { get; set; } 
} 

我有一個觀點:

@Html.DropDownListFor(x => x.TypeID, Model.DocumentTypes, "- please select -") 

我填充我下拉

 var model = new DocumentModel(); 
     model.DocumentTypes = GetDocumentTypes(); 

private static List<SelectListItem> GetDocumentTypes() 
    { 

     var items = new List<SelectListItem> 
         { 
          new SelectListItem 
           {Text = @"Text #1", Value = "1"}, 
          new SelectListItem 
           {Text = @"Text #2", Value = "2"}, 
         }; 

     return items; 

    } 

當表單回傳時,我有一個控制器操作:

[HttpPost] 
    public void UploadDocument(DocumentModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      // I want to get the text from the dropdown 
     } 
    } 

如何從我的下拉列表中獲取文本?由於

+0

你想檢索選定的項目嗎? –

+0

我相信,在一個包含下拉列表的表單提交中,只會發送所選的「VALUE」。你可以獲取這個值,並從列表中查找文本,或者你可以展開並計劃它並將它傳遞給'@ Html.HiddenFor()'。 – user1166147

回答

17

使用默認的模型綁定可能無法輕鬆實現。你必須像這樣一個小的解決方法。

1)添加一個新的屬性到模型/視圖模型存儲選擇的文本

public class DocumentModel 
{ 
    public int TypeID { get; set; } 
    public List<SelectListItem> DocumentTypes { get; set; } 
    public string SelctedType { set;get;} 
} 

2)使用Html.HiddenFor助手方法來創建的形式隱藏變量此屬性

@Html.HiddenFor(x => x.SelctedType) 

3)使用小javascript來覆蓋提交!即;用戶提交表單時,從下拉菜單中獲取選定的文本,並將該值設置爲「隱藏」字段的值。

$(function() { 
    $("form").submit(function(){ 
     var selTypeText= $("#TypeID option:selected").text(); 
     $("#SelctedType").val(selTypeText);   
    }); 
}); 

現在,在您HTTPPost操作方法,這將是在SelectedType屬性中可用。

[HttpPost] 
public void UploadDocument(DocumentModel model) 
{ 
    if(ModelState.IsValid) 
    { 
     string thatValue=model.SelectedType; 
    } 
} 
+0

感謝您的響應,但調用UploadDocument時,model.SelectedType爲null。我仍然缺少一些東西 – BoundForGlory

+0

@ user1202717:在提交表單之前(在設置隱藏字段值之後)使用第3步中的警報來查看是否正確設置 – Shyju

+1

它可以工作。我看到你改變了這行'var selTypeText = $(「#TypeID option:selected」)。text();'我無法相信下拉在mVC中是如此痛苦。謝謝 – BoundForGlory

2

,如果你想要做的是檢索所選項目那麼這可以做的工作:

var selecteItem = model.DocumentTypes.Where(item=>item.Selected).FirstOrDefault(); 

乾杯!

+0

我運行此並且selectedItem爲空 – BoundForGlory

1

在你的模型我還會有一個字符串 -

public string Selected{ get; set; } 

然後在您的視圖:

@Html.DropDownListFor(model => model.Selected, new SelectList(Model.DocumentTypes, "Value", "Text")) 
+0

我試過這個,並運行這段代碼'var selecteItem = model.DocumentTypes.Where(item => item.Selected).FirstOrDefault();'並且selectedItem仍然是空的 – BoundForGlory

+0

你不應該需要var等東西。在你的控制器中,你應該可以簡單地執行字符串selected = model.Selected;如果你在下一行有一個斷點,那麼選擇的字符串應該從下拉列表中選擇。 –

1

我迷迷糊糊這裏試圖找到讓文本值的方式進行一個SelectList以DropDownList以外的格式顯示它(我正在重新使用我的Edit ViewModel,因爲它有我需要的所有數據)

var text = selectList.Where(q => q.Selected == true).First().Text;