ASP.NET剃刀错误地工作多选下拉列表

时间:2018-01-04 11:55:53

标签: razor asp.net-core asp.net-core-mvc

有一个带有多选

的下拉列表
<select asp-for="UsersListForAssignTo" id="selectUser" class="form-control" asp-items="@ViewBag.UsersList" multiple="multiple"></select>

我准备一个列表,以便默认选择一些值

List<string> allUsers = await db.Users.Select(u => u.UserName).ToListAsync();
                List<string> usersAssignedTo = await db.MasterAssigmentTables.Where(mat => mat.TableId == id && mat.TableName == typeof(TestCaseDesign).Name).Include(mat => mat.User).Select(u => u.User.UserName).ToListAsync();
                List<SelectListItem> userListAssigned = new List<SelectListItem>();
                foreach (string user in allUsers)
                {
                    if (usersAssignedTo.Contains(user))
                    {
                        userListAssigned.Add(new SelectListItem { Text = user, Selected = true });
                    }
                    else
                    {
                        userListAssigned.Add(new SelectListItem { Text = user, Selected = false });
                    }
                }
                ViewBag.UsersList = userListAssigned;

将值传递给模型

 public List<string> UsersListForAssignTo { get; set; }

问题在于,当我使用&#34; asp-for&#34;所有值都未被选中

如果我删除了对模型的绑定 - 那么一切正常

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

在这种情况下,Selected的{​​{1}}值毫无意义。唯一重要的是SelectListItem中的内容。该对象由请求中的值,ModelState中的任何内容(包括ViewData)以及最终传递到视图中的模型上的值组成。

长短,如果你想要最初选择的一些选项,它们需要出现在你绑定的列表中。在返回视图之前,将ViewBag设置为您想要最初选择的值列表,您就可以了。