如何解决DropDownListFor 未绑定到模型列表中的值
我有以下两个模型,其中一个包含另一个模型的列表,即 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 中的所选项目未正确显示。
@for(int i=0; i < Model.Users.Count; i++)
{
@Html.DropDownListFor(x => x.Users[i].SelectedUserId,Model.Users[i].UserOptions)
}
但是,如果我在页面上的每个 DropDownList 中选择不同的值,然后将表单发回服务器,正确的值将绑定在模型列表中的每个单独的 UserModel 中,即“用户”。
我在这里遗漏了什么吗?这是一个已知的错误?为什么在服务器端设置每个模型的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;
}
}
如果你使用网络核心,最好使用“select”标签。它会自动分配。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。