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)%>
此代码未将Id = 4的人员设置为所选项目,而是始终选择列表中的第一项作为所选项目。
我错过了哪一步?
答案 0 :(得分:2)
您是否尝试过设置项目本身的Selected
属性? e.g。
foreach (Person person in personList)
{
items.Add(new SelectListItem()
{
Value = person.Id,
Text = person.FirstName + " " + person.LastName,
Selected = person.Id == 4
});
}
<强>更新强>
我认为您需要将所选值传递到视图并在其中处理它:
ViewData["personSelectList"] = new SelectList(items, "Value", "Text");
ViewData["personId"] = 4;
查看
<%= Html.DropDownList("personId", ViewData["personSelectList"] as SelectList) %>
答案 1 :(得分:1)
items = new List<SelectListItem>();
foreach (Person person in personList)
{
items.Add(new SelectListItem()
{
Value = person.Id,
Text = person.FirstName + " " + person.LastName,
Selected = person.Id == 4
});
}
ViewData["personSelectList"] = items
然后查看
@Html.DropDownList("holdPersonSelectList", (List<SelectListItem>)ViewData["personSelectList")
然后回到控制器
public ActionResult Index(string holdPersonSelectList)
编辑: 控制器中的holdPersonSelectList将保存所选项的Value的字符串值。 所以,如果它是一个id字段,只需解析为int。
如果你想设置一个值,我会传入另一个持有该数字的viewdata,并使用jquery // javascript设置它。
$('holdPersonSelectList').val('4');
答案 2 :(得分:0)
SelectListItem.Value
是string
,但您传递4
- 这是一个整数。请尝试传递"4"
。
答案 3 :(得分:0)
我刚刚使用MVC3编写了测试,它没有问题:
@{
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)
在两个DropDownLists中,选定的值是Scott,因此它会选择第二个项目,如代码所示。
答案 4 :(得分:0)
我的解决方案不同。我必须将SelectList
更改为MultiSelectList
所以,我不是做foreach,而是做
之类的事情int[] personListSelected= personList.Select(p=>(int)p.idPerson).ToArray();
IEnumerable<SelectListItem> personList = new MultiSelectList(personList, "idPerson", "namePerson",personListSelected);
答案 5 :(得分:0)
使用 LINQ,您可以执行以下操作;
ViewData["personSelectList"] = new SelectList(items, "Value", "Text", items.FirstOrDefault(i => i.id == 4).id);
或者更好,
int SelectedID = 4;
ViewData["personSelectList"] = new SelectList(items, "Value", "Text", items.FirstOrDefault(i => i.id == SelectedID).id);