asp.net MVC3의 MultiSelectLists에 대한 다양한 포럼을 찾아서 많은 시간을 보냈습니다. 마침내 내 문제를 해결하는 방법을 알아 냈습니다. 이제 코드를 줄이고 ViewBags에서 이상한 점을 발견했습니다. 먼저 코드를 설명하면 행동을 설명 할 수 있습니다.ViewBag 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);
}
부분의 코드보기에서 컨트롤러에서 편집 작업에서 컨트롤러에 사용할 수 있도록 MultiSelectList를 생성 내 기능
<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 개입니다.
내 목표는 편집의 작업은 목록 상자 당 2 줄 반대로 단순히 GetPermissionList 호출하고는 viewbag로 돌아 가진 그래서 난 그냥보기에 그것을 표시 할 수있는 코드의 한 라인을 가지고있다 나는 현재 가지고있다.
그냥 코드를보고는, 내가 이런 식으로 전화를 걸한다면 분명한 것 같다
ViewBag.OrdersListBox = GetPermissionList (securityroles.Orders.Split (''));
선택한 값이 작동하지 않아야합니다. 괴상한 것을 합성하기 위해, 내가 시도한 다른 것은 여기있다. 그리고 그것은 잘 동작했지만, 왜 이해가되지 않는다.
ViewBag.Orders = securityroles.Orders.Split (',');
ViewBag.OrdersListBox = GetPermissionList (securityroles.Orders.Split (','))); ViewBag.OrdersListBox에있는 아무 역할을하지 않으며 뷰에 사용하지만, 단순히 코드의 두 번째 라인보다 그것을 값을 할당 할 때 작동
ViewBag.Orders.
누구에게나 맞는가? GetPermissionList에 대한 방법을 만드는 방법에 대한 제안 사항은 ViewBag 객체를 전달하는 대신 문자열 배열을 보내면 올바르게 작동합니다.
당신이 LINKE ViewBag.OrdersListBox = GetPermissionList (securityroles.Orders.Split ('')) 후 중단 권한을 설정하는 경우; 그것은 가치가 있습니까?ToArray()를 분할의 끝에 추가하는 것은 어떨까요? 어둠 속에서 그냥 쐈어 –
ToArray(), 값을 선택하지 않고 동일한 문제를 추가하려고했습니다. 또한 제안 된 줄에 중단 점을 추가하고 전달되는 값이 정확합니다. 나는 왜 그 첫 번째 ViewBag 객체를 잘라내는 것이 작동하지 않는지 논리적으로 생각할 수 없다. – hyro78