从 Html.DropdownListFor 获取文本.MVC3.
本文关键字:取文本 MVC3 获取 DropdownListFor Html | 更新日期: 2023-09-27 18:37:06
我有一个模型:
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
}
}
如何从下拉列表中获取文本?谢谢
使用默认模型绑定可能不容易获得此值。你必须有一个像这样的小解决方法。
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;
}
}
如果您想做的是检索选定的项目,那么这可以完成工作:
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 以外的格式显示它(我正在重用我的编辑视图模型,因为它包含我需要的所有数据)
var text = selectList.Where(q => q.Selected == true).First().Text;