有一个带有多选的下拉列表
<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; }
问题是当我使用"asp-for"时,所有值都变为未选中状态
如果我删除与模型的绑定 - 那么一切都很好
如何解决这个问题?
在这种情况下,
SelectListItem
的Selected
值毫无意义。唯一重要的是ModelState
里有什么。该对象由来自请求的值、ViewData
中的任何内容(包括 ViewBag
(以及最后传递到视图中的模型上的值组成。
长短,如果您希望最初选择某些选项,它们需要存在于要绑定到的列表中。在返回视图之前,UsersListForAssignTo
设置为要最初选择的值列表,这样就可以了。