我有一个性别选择字段( – 选择 –,男,女),我填充在我的控制器.当页面加载时,我希望在加载页面时自动选择模型pm.Gender中选择的性别.
pm.Gender的值返回:
>“”
>“M”
>“F”
视图:
<%: Model.Gender %> <%: Html.DropDownListFor(m => m.Gender,(IEnumerable<SelectListItem>)ViewData["gender"],new { @class = "span2" })%>
控制器:
gender = new[] { "Select","Male","Female" }; List<SelectListItem> genderselectList = new List<SelectListItem>(); foreach (string item in gender) { SelectListItem sli = new SelectListItem { Text = item,Value = item }; if (item.Trim().StartsWith(pm.Gender)) sli.Selected = true; genderselectList.Add(sli); } ViewData["gender"] = genderselectList;
调试应用程序后,我可以看到genderselectList包含适当的数据,其中Selected = true用于应该选择的正确值.但是当页面加载时,下拉列表中没有选择任何内容,该列表应该使用Html.DropDownListFor生成.
编辑:不适用于任何浏览器.
任何人都知道可能导致这个问题?任何帮助将不胜感激.
干杯.
编辑:(实施Kaf解决方案后)
好吧,这是我实施Kaf解决方案后所做的.
视图:
<%: Html.DropDownListFor(m => m.Gender,(SelectList)(ViewData["gender"]),new { @class = "span2" }) %>
控制器:
gender = new[] { "Select","Female" }; List<SelectList> genderselectList = new List<SelectList>(); foreach (string item in gender) { SelectList sli; if (item.Trim().StartsWith(pm.Gender)) sli = new SelectList(GetGender(),item,item); else sli = new SelectList(GetGender(),item); //without selectedValue genderselectList.Add(sli); } ViewData["gender"] = genderselectList;
当我这样做,我得到以下例外:
无法转换类型为“System.Collections.Generic.List`1 [System.Web.Mvc.SelectList]”的对象键入“System.Web.Mvc.SelectList”.
任何人知道我在做错什么?
解决方法
我建议对SelectList使用强类型属性(而不是使用ViewBag / ViewData)更好.我相信你期望的是,您的下拉列表将在模型中进行性别选择时预选.这是一个解决方案(代码不是100%干净,但这将工作)
模型
public class TestModel { public string Gender { get; set; } public IEnumerable<SelectListItem> GenderList { get { List<SelectListItem> list = new List<SelectListItem> { new SelectListItem() { Text = "Select",Value = "Select" },new SelectListItem() { Text = "Male",Value = "Male" },new SelectListItem() { Text = "Female",Value = "Female" } }; return list.Select(l => new SelectListItem { Selected = (l.Value == Gender),Text = l.Text,Value = l.Value }); } } }
控制器动作
public ActionResult MyView() { TestModel m = new TestModel(); m.Gender = "Female"; return View(m); }
MyView.cshtml
@model TestModel @{ ViewBag.Title = "MyView"; } <h2>MyView</h2> @using (Html.BeginForm()) { <div> @Html.DropDownListFor(model => model.Gender,Model.GenderList) </div> }
OUTPUT
选择“女性”选项的下拉菜单
编辑
1)https://github.com/prashanth-t/DropdownDemo_BareBones(使用MVC 4空模板,文件大小最小)
2)https://github.com/prashanth-t/DropdownDemo(使用MVC 4互联网应用模板,较大的文件大小)