从Html.DropdownListFor … MVC3获取文本

我有一个模特:

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

我有一个观点:

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

我填充了我的下拉

  var model = new DocumentModel(); model.DocumentTypes = GetDocumentTypes(); private static List GetDocumentTypes() { var items = new List { 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 } } 

如何从我的下拉列表中获取文本? 谢谢

使用默认模型绑定可能无法轻松获得此function。 你需要这样一个小的解决方法。

1)向模型/ viewmodel添加新属性以存储选定的文本

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

2)使用Html.HiddenFor Helper方法在该属性的表单中创建隐藏变量

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

如果你想要做的是检索所选项目,那么这可以做的工作:

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

干杯!

在你的模型上我会有另一个字符串 –

 public string Selected{ get; set; } 

那么在你看来:

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

我偶然发现,试图找到从SelectList中获取文本值的方法,以DropDownList以外的格式显示它(我正在重用我的Edit ViewModel,因为它拥有我需要的所有数据)

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