我有一个性别选择字段(-选择当页面加载时,我希望在加载页面时自动选择在模型pm.Gender
中选择的性别。
pm.Gender
的值返回为:
“
”
视图:
<%: 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'.
有人知道我做错了什么吗?
发布于 2012-05-11 15:59:25
我建议您最好为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>
}
输出
选择“女性”选项的下拉菜单
编辑
基于注释,可以在下面找到指向示例项目的链接
1) https://github.com/prashanth-t/DropdownDemo_BareBones (使用MVC 4空模板)。较小的文件大小和最低限度)
2) https://github.com/prashanth-t/DropdownDemo (使用MVC 4网络应用模板)。更大的文件大小)
发布于 2019-03-10 05:09:48
这是在 MVC Razor中已知的错误。根据已知的bug文档
“这个问题背后的原因是,asp.net MVC首先在下拉列表的名称和模型上的属性之间寻找匹配。如果匹配,则SelectList的选定值将被覆盖。更改下拉列表的名称是补救问题所需的全部工作。”
我在这里给出一个小例子,你可以用来测试分辨率。
var paymentTypeList = new List<SelectListItem>
{
new SelectListItem { Text = "Select Payment Type", Value = "NA" },
new SelectListItem { Text = "Card", Value = "Card" },
new SelectListItem { Text = "Paytm Wallet", Value = "Paytm Wallet" },
new SelectListItem { Text = "Cash", Value = "Cash", Selected = true },
new SelectListItem { Text = "Credit", Value = "Credit" },
new SelectListItem { Text = "Other", Value = "Other" }
};
ViewBag.paymentTypeList = paymentTypeList;
解决方案1(最简单)-更改MVC视图中选择列表id的声明id名称
@Html.DropDownList("paymentTypeListNew", (List<SelectListItem>)ViewBag.paymentTypeList, new { @class = "form-control select2 select1" })
解析2:(只使用与viewbag/viewdata属性匹配的@Html.DropDownList的单个构造函数)
要确保选中的项目(本例中的现金)被选中,请在MVC Razor视图中执行以下操作。只使用以下构造函数,没有任何CSS或新的对象值
@Html.DropDownList("paymentTypeList")
现在,如果您担心无法初始化CSS,则需要编程地初始化css。例如,如果您正在使用Jquery,那么可以使用
$("#paymentTypeList").addClass("form-control");
$("#paymentTypeList").addClass("select2");
发布于 2012-05-11 15:00:03
方法使用select获取性别:
private Dictionary<string,string> GetGender(){
Dictionary<string, string> myDic = new Dictionary<string, string>();
myDic.Add(System.DBNull.Value.ToString(), "Select");
myDic.Add("Male", "Male");
myDic.Add("Female", "Female");
return myDic;
}
在主计长中:
//without selectedValue
ViewData["gender"] = new SelectList(GetGender(), "Key", "Value");
或
//"Male" as selectedValue
ViewData["gender"] = new SelectList(GetGender(), "Key", "Value", "Male");
认为:
Html.DropDownListFor(m => m.Gender, (SelectList)(ViewData["gender"]),
new { @class = "span2" })
https://stackoverflow.com/questions/10553593
复制相似问题