Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DropDownList用于不绑定到模型列表中的值_C#_Asp.net Mvc_Razor_Model Binding - Fatal编程技术网

C# DropDownList用于不绑定到模型列表中的值

C# DropDownList用于不绑定到模型列表中的值,c#,asp.net-mvc,razor,model-binding,C#,Asp.net Mvc,Razor,Model Binding,我有以下两个模型,其中一个包含另一个模型的列表,即UserModels public class UserModel { public int SelectedUserId { get; set; } public SelectList UserOptions { get; set; } public UserModel() { var users = new List<SelectListItem> {

我有以下两个模型,其中一个包含另一个模型的列表,即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>();
    }
}
公共类用户模型
{
public int SelectedUserId{get;set;}
公共选择列表用户选项{get;set;}
公共用户模型()
{
var users=新列表
{
新建SelectListItem{Text=“米老鼠”,Value=“1”},
新建SelectListItem{Text=“Goofy”,Value=“2”},
新建SelectListItem{Text=“Donald Duck”,Value=“3”},
};
用户选项=新的选择列表(用户、“值”、“文本”);
}
}
公共类MyModel
{
公共IList用户{get;set;}
公共MyModel()
{
用户=新列表();
}
}
当我尝试将此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)
}
for(int i=0;ix.Users[i]。SelectedUserId,Model.Users[i]。UserOptions) } 但是,如果我在页面上的每个下拉列表中选择不同的值,然后将表单发布回服务器,则正确的值将绑定在模型列表中的每个单独的UserModel中,即“Users”


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

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

}
列表用户=null;
公共字符串SelectedUserId
{ 
获取{return users.Where(u=>u.Selected).FirstOrDefault().Value;}
集合{
var sUser=users.Where(u=>u.Value=Value).FirstOrDefault();
sUser.Selected=true;
}
}

如果您使用netcore,最好使用“select”标记。它会自动分配。

如何创建列表用户?例如-Users.Add(新用户模型{SelectedUserId=2})@Sergey我是否必须将所选SelectListItem显式设置为每个UserModel SelectList中的每个UserOptions中的selected?谢谢,是的,当然可以,谢谢提示。至少我知道这不是因为我愚蠢,而是因为@Html.dropdownlist以一种奇怪的方式工作。