我有一个视图,其中提供了带有多个选择选项的下拉列表。
这是为视图提供数据的控制器的一部分:
this.ViewBag.UserSelectList = new MultiSelectList(userList, "Id", "FullName", user.Select(u => u.Id).ToArray());
this.ViewBag.UserId = user.Select(u => u.Id).ToArray();
我不知道我是否需要第二行,但是在它成为单选列表之前,它运行良好,并且正在选择我需要的元素。
userList
是所有可供选择的用户的列表。 user
是所选用户的列表。
这是“查看”部分:
@Html.DropDownList("userId", (MultiSelectList) ViewBag.UserSelectList,
htmlAttributes: new { @class = "selectpicker", multiple = "multiple" })
逻辑原理如下:
userList
是常量userId
为空,则控制器将已登录的用户添加到user
列表中问题是:
userId
为空,则下拉列表中没有任何选择userId
具有多个元素-下拉列表中仅选择了第一个元素这是完整的Controller方法:
public async Task<ActionResult> Calendar(string[] userId, Enums.CalendarOptionEnum? calendarOption)
{
calendarOption = calendarOption ?? Enums.CalendarOptionEnum.Self;
userId = userId ?? new [] { this.User.Identity.GetUserId() };
var user = (await this.unitOfWork.UserRepository.Find(u => userId.Contains(u.Id)));
if (user == null || user.Count == 0)
{
return this.HttpNotFound();
}
var leaves = await this.leaveService.GetLeavesForCaledar(user, calendarOption.Value);
var userList = (await this.userService.GetAllSubordinatesAndSelf(this.User.Identity.GetUserId())).OrderBy(u => u.LastName);
this.ViewBag.UserSelectList = new MultiSelectList(userList, "Id", "FullName", user.Select(u => u.Id).ToArray());
this.ViewBag.UserId = user.Select(u => u.Id).ToArray();
this.ViewBag.CalendarOption = calendarOption;
return this.View(leaves);
}
我一直在调试,甚至创建IEnumberable<SelectListItem>
并手动将Selected
属性设置为true
,但是它也没有选择这些选项。