传入SelectItems时,SelectList未设置选定值

时间:2012-08-09 14:15:10

标签: c# asp.net-mvc selectlist

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的人员设置为所选项目,而是始终选择列表中的第一项作为所选项目。

我错过了哪一步?

6 个答案:

答案 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.Valuestring,但您传递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);