Я потратил много времени, просматривая различные форумы для получения помощи по MultiSelectLists в asp.net MVC3.Наконец-то разобрался, как решить мою проблему, теперь я пытаюсь сократить свой код и наткнулся на что-то странное с ViewBags.Сначала код, затем я объясню поведение.
Моя функция, которая создает MultiSelectList для использования контроллером
public MultiSelectList GetPermissionList(string[] selectedValues)
{
List<SelectListItem> permissions = new List<SelectListItem>()
{
new SelectListItem{ Value = "", Text = "None"},
new SelectListItem{ Value = "View", Text = "View"},
new SelectListItem{ Value = "Add", Text = "Add"},
new SelectListItem{ Value = "Edit", Text = "Edit"},
new SelectListItem{ Value = "Delete", Text = "Delete"}
};
return new MultiSelectList(permissions, "Value", "Text", selectedValues);
}
частичный код издействие редактирования из контроллера
public ActionResult Edit(int id)
{
ViewBag.Title = "Edit a Security Role";
SecurityRoles securityroles = Repository.Details(id);
ViewBag.Orders = securityroles.Orders.Split(',');
ViewBag.OrdersListBox = GetPermissionList(ViewBag.Orders);
return View(securityroles);
}
частичный код из View
<td class="rightAlign topAlign editor-label">
@Html.MyLabel(m => m.Orders, "lblOrders")
</td>
<td class="editor-field">
@Html.ListBoxFor(m => m.Orders, ViewBag.OrdersListBox as MultiSelectList, new { size = "5" })
</td>
Имейте в виду, я вырезал большой кусоккод из действия редактирования, у меня есть примерно 9 списков, которые я создаю для этого менеджера ролей безопасности.
Моя цель в действии редактирования состоит в том, чтобы просто иметь 1 строку кода, вызывая GetPermissionList и его возвращение в пакет просмотра, чтобы я мог просто отобразить его в виде, в отличие от двух строк в списке, которые у меня есть в настоящее время.
Просто глядя на код, кажется очевидным, если ядолжны были сделать вызов следующим образом:
ViewBag.OrdersListBox = GetPermissionList (securityroles.Orders.Split (','));
Это должно работать, новыбранные значения не проходят.Чтобы усугубить странность, я попробовал еще кое-что, и оно работало нормально, но не имеет смысла почему.
ViewBag.Orders = securityroles.Orders.Split (',');
ViewBag.OrdersListBox = GetPermissionList (securityroles.Orders.Split (','));
ViewBag.Orders не играет роли в ViewBag.OrdersListBox и не используется в представлении, но когда я просто присваиваю ему значение, работает вторая строка кода.
Имеет ли это смысл для кого-либо?Любые предложения о том, как создать способ GetPermissionList , чтобы он просто работал правильно, отправив ему строковый массив вместо передачи ему объекта ViewBag?