C# SelectList传入SelectItems时未设置所选值 foreach(个人列表中的个人){ SelectListItem=新建SelectListItem(); item.Value=person.Id; item.Text=person.FirstName+“”+person.LastName; 项目。添加(项目); } ViewData[“personSelectList”]=新的选择列表(项目,“值”、“文本”4);
此代码不会将Id=4的人员设置为所选项目,而是始终选择列表中的第一个项目作为所选项目C# SelectList传入SelectItems时未设置所选值 foreach(个人列表中的个人){ SelectListItem=新建SelectListItem(); item.Value=person.Id; item.Text=person.FirstName+“”+person.LastName; 项目。添加(项目); } ViewData[“personSelectList”]=新的选择列表(项目,“值”、“文本”4);,c#,asp.net-mvc,selectlist,C#,Asp.net Mvc,Selectlist,此代码不会将Id=4的人员设置为所选项目,而是始终选择列表中的第一个项目作为所选项目 我缺少哪一步?您是否尝试在项目本身上设置Selected属性?e、 g foreach (Person person in personList) { SelectListItem item = new SelectListItem(); item.Value = person.Id; item.Text = person.FirstNa
我缺少哪一步?您是否尝试在项目本身上设置
Selected
属性?e、 g
foreach (Person person in personList) {
SelectListItem item = new SelectListItem();
item.Value = person.Id;
item.Text = person.FirstName + " " + person.LastName;
items.Add(item);
}
ViewData["personSelectList"] = new SelectList(items, "Value", "Text", 4);
<%=Html.DropDownList("personId", ViewData["personSelectList"] as SelectList)%>
更新
我认为您需要将所选值传递到视图,并在其中处理它:
foreach (Person person in personList)
{
items.Add(new SelectListItem()
{
Value = person.Id,
Text = person.FirstName + " " + person.LastName,
Selected = person.Id == 4
});
}
看法
SelectListItem.Value
是一个字符串
,但您传递的是4
——它是一个整数。请尝试通过“4”
。我刚刚使用MVC3编写了测试,它可以正常工作:
<%= Html.DropDownList("personId", ViewData["personSelectList"] as SelectList) %>
在两个DropDownLists上,所选的值都是Scott,所以它确实选择了第二项,就像代码中所写的一样
@{
var items = new[]
{
new Test {Id = 1, Name = "Jhon"},
new Test {Id = 2, Name = "Scott"}
};
var selectList = new SelectList(items, "Id", "Name", 2);
var selectEnumerable = items.Select(x => new SelectListItem
{
Selected = x.Id == 2,
Text = x.Name,
Value = x.Id.ToString()
});
}
@Html.DropDownList("name", selectList)
@Html.DropDownList("name2", selectEnumerable)
编辑:
控制器中的holdPersonSelectList将保存所选项目值的字符串值。
所以,如果它是一个id字段,只需解析为int
如果您希望设置一个值,我将传入一段保存该数字的不同viewdata,并使用jquery//javascript进行设置
public ActionResult Index(string holdPersonSelectList)
我的解决方案不同。我不得不将
SelectList
更改为MultiSelectList
因此,我没有做foreach,而是做了如下的事情
$('holdPersonSelectList').val('4');
int[]personListSelected=personList.Select(p=>(int)p.idPerson.ToArray();
IEnumerable personList=新的多选列表(personList,“idPerson”,“namePerson”,personListSelected);
尝试了这个。。。不起作用。非常令人沮丧,因为它肯定是解决方案。可能重复
@Html.DropDownList("holdPersonSelectList", (List<SelectListItem>)ViewData["personSelectList")
public ActionResult Index(string holdPersonSelectList)
$('holdPersonSelectList').val('4');
int[] personListSelected= personList.Select(p=>(int)p.idPerson).ToArray();
IEnumerable<SelectListItem> personList = new MultiSelectList(personList, "idPerson", "namePerson",personListSelected);