【发布时间】:2019-08-20 10:58:34
【问题描述】:
我有一个性别选择字段(--Select--、Male、Female),我正在将其填充到我的控制器中。当页面加载时,我希望在模型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", "Male", "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, item);
else
sli = new SelectList(GetGender(), item, item);
//without selectedValue
genderselectList.Add(sli);
}
ViewData["gender"] = genderselectList;
当我这样做时,我得到以下异常:Unable to cast object of type 'System.Collections.Generic.List`1[System.Web.Mvc.SelectList]' to type 'System.Web.Mvc.SelectList'.
有人知道我做错了什么吗?
【问题讨论】:
-
这仅在 IE9 中吗?不久前我遇到了类似的问题,但无法解决。
-
它在任何浏览器中都不起作用。
-
在我的回答中使用
ViewData["gender"] = new SelectList(GetGender(), "Key", "Value", "Male");。您没有像我发布的那样使用它,而是将其混合在一起。 -
是的,但在这种情况下,它的硬编码为“男性”,但我需要从 pm.Gender 中动态选择它。
-
然后使用
without the selectedValue,因为我已经发布了我的答案。模型活页夹将完成其余的工作。请阅读答案。
标签: c# asp.net-mvc