我有一个for循环来生成IEnumerable列表:
public static IEnumerable<SelectListItem> loadData()
{
DataTable dt = load_from_database;
List<SelectListItem> list = new List<SelectListItem>();
foreach (DataRow dr in dt.Rows)
{
SelectListItem listItem = new SelectListItem();
listItem.Text = dr["name"].ToString();
listItem.Value = dr["id"].ToString();
list.Add(listItem);
}
return list;
}
我有以下型号:
public class Models
{
public string selectedUserApp { get; set; }
public IEnumerable<SelectListItem> userApps { get; set; }
}
控制器:
public ActionResult Index()
{
var model = new UserApplicationModels();
userAppsList = loadData();
model.userApps = userAppsList;
model.selectedUserApp = model.userApps.First().Value;
return View(model);
}
然后是观点:
@model Models
@Html.DropDownListFor(x=>x.selectedUserApp , Model.userApps)
我得到的是所选项目的价值,但我需要获取所选项目的文本。
我该怎么办?
答案 0 :(得分:0)
@ Html.HiddenFor(m =&gt; m.selectedUserAppText)
使用jQuery代码设置其值,如:
$("#your_dropdown_id").change(function(e) {
var selectedText = $("#your_dropdown_id").children("option:selected").text();
$('#your_hidden_for_id').val(selectedText);
});
提交此表单后,您的selectedUserAppText字段将获得所选项目文本 请在以下位置查看此操作: http://jsfiddle.net/m4zuH/1/
答案 1 :(得分:0)
MVC必须使用标准HTTP发布机制,并且此机制不包含下拉列表的文本。它只包含值。因此,您必须..在服务器上,根据id查找该值。
你如何做到这一点,取决于你的应用程序。一种选择是再次调用loadData(),然后执行简单的linq查询以返回文本。
var data = loadData();
var text = data.Where(x => x.Value == value).Single().Text;
答案 2 :(得分:0)
如果您想拥有自定义选定值,那么您需要在下拉列表中添加更多代码
@Html.DropDownListFor(m => m.selectedUserApp , new SelectList(Model.userApps, "Name", "Name"))
SelectList就是您所需要的,因为您可以设置对象的哪些属性是值或将是文本:
public SelectList(IEnumerable items, string dataValueField, string dataTextField);