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

我错过了什么步骤?

4

6 回答 6

2

您是否尝试过Selected在项目本身上设置属性?例如

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) %> 
于 2012-08-09T14:17:47.267 回答
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 将保存所选项目的值的字符串值。所以,如果它是一个 id 字段,只需解析为 int。

如果您要设置一个值,我会传入另一个包含该数字的视图数据,并使用 jquery // javascript.

$('holdPersonSelectList').val('4');
于 2012-08-09T16:24:37.470 回答
0

SelectListItem.Value是 astring但你正在传递4- 这是一个整数。尝试通过"4"

于 2012-08-09T14:20:39.607 回答
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,因此它确实选择了代码中编写的第二项。

于 2012-08-09T14:35:26.300 回答
0

我的解决方案不同。我不得不SelectList改为MultiSelectList

所以,我没有做foreach,而是做类似的事情

int[] personListSelected= personList.Select(p=>(int)p.idPerson).ToArray();

IEnumerable<SelectListItem> personList = new MultiSelectList(personList, "idPerson", "namePerson",personListSelected);
于 2017-08-11T18:32:55.550 回答
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);
于 2021-07-27T15:13:34.260 回答