C# SelectList传入SelectItems时未设置所选值 foreach(个人列表中的个人){ SelectListItem=新建SelectListItem(); item.Value=person.Id; item.Text=person.FirstName+“”+person.LastName; 项目。添加(项目); } ViewData[“personSelectList”]=新的选择列表(项目,“值”、“文本”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

此代码不会将Id=4的人员设置为所选项目,而是始终选择列表中的第一个项目作为所选项目


我缺少哪一步?

您是否尝试在项目本身上设置
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);