【问题标题】:DropDownListFor not binding to value in a list of modelsDropDownListFor 未绑定到模型列表中的值
【发布时间】:2021-05-17 01:42:37
【问题描述】:

我有以下两个模型,其中一个包含另一个模型的列表,即 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>();
    }
}

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

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

但是,如果我在页面上的每个 DropDownList 中选择不同的值,然后将表单发送回服务器,则正确的值将绑定在模型列表中的每个单独的 UserModel 中,即“用户”。

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

【问题讨论】:

  • 如何创建 List 用户?
  • 例如-Users.Add(new UserModel { SelectedUserId = 2 });
  • @Sergey 我是否必须在每个 UserModel SelectList 的每个 UserOptions 中将选定的 SelectListItem 显式设置为 Selected?

标签: c# asp.net-mvc razor model-binding


【解决方案1】:

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

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

您必须在 UserModel 中分配选定的项目:

 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;
 }

}

如果你使用net core 最好使用“select”标签。它会自动分配。

【讨论】:

  • 谢谢,是的,这确实有效,感谢您的提示。至少我知道这不是我愚蠢,而是@Html.DropDownListFor 以一种奇怪的方式工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多