DropDownListFor 不绑定到模型列表中的值

DropDownListFor not binding to value in a list of models

我有以下两个模型,其中一个包含另一个模型的列表,即 UserModels。

public class UserModel
{
    public int SelectedUserId { get; set; }

    public SelectList UserOptions { get; set; }

    public UserModel()
    {
        var users = new List<SelectListItem>
        {
            new SelectListItem { Text = "Mickey Mouse", Value = "1" },
            new SelectListItem { Text = "Goofy", Value = "2" },
            new SelectListItem { Text = "Donald Duck", Value = "3" },
        };

        UserOptions = new SelectList(users, "Value", "Text");
    }
}

public class MyModel
{
    public IList<UserModel> Users { get; set; }

    public MyModel()
    {
        Users = new List<UserModel>();
    }
}

当我尝试将此 UserModel 列表绑定到具有多个 DropDownList 的 MVC Razor 页面时,值未绑定且 DropDownList 中的 selected 项目未正确显示。

@for(int i=0; i < Model.Users.Count; i++)
{
    @Html.DropDownListFor(x => x.Users[i].SelectedUserId, Model.Users[i].UserOptions)
}

但是,如果我 select 页面上每个 DropDownList 中的不同值,然后 post 将表单返回到服务器,则正确的值会绑定到模型列表中的每个单独的 UserModel 中,即'Users'.

我是不是漏掉了什么?这是一个已知的错误?为什么在服务器上的每个模型中设置 SelectedUserId 的值时, select 列表中的正确选项未绑定,但 selecting select 列表中的选项网页有效吗?

@Html.DropDownListFor 的工作方式很奇怪,当你初始化一个时,你也必须初始化 selected 值。因此,如果您创建这样的列表:

Users.Add(new UserModel { SelectedUserId = "2" }); 

您必须在 UserModel 中分配 selected 项:

 List<SelectListItem> users=null;

 public string SelectedUserId 
{ 

get {  return users.Where(u=>u.Selected).FirstOrDefault().Value;  }

set { 
       var  sUser=users.Where(u=>u.Value=value).FirstOrDefault();
       sUser.Selected=true;
 }

}

如果你使用网络核心更好地使用“select”标签。它会自动分配。