C# DropDownList用于不绑定到模型列表中的值
我有以下两个模型,其中一个包含另一个模型的列表,即UserModelsC# 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> {
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;i我是不是遗漏了什么?这是已知的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以一种奇怪的方式工作。