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



有一个带有多选的下拉列表

<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"时,所有值都变为未选中状态

如果我删除与模型的绑定 - 那么一切都很好

如何解决这个问题?

在这种情况下,

SelectListItemSelected值毫无意义。唯一重要的是ModelState里有什么。该对象由来自请求的值、ViewData中的任何内容(包括 ViewBag (以及最后传递到视图中的模型上的值组成。

长短,如果您希望最初选择某些选项,它们需要存在于要绑定到的列表中。在返回视图之前,UsersListForAssignTo设置为要最初选择的值列表,这样就可以了。

最新更新