2011-12-28 3 views
2

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 객체를 전달하는 대신 문자열 배열을 보내면 올바르게 작동합니다.

+0

당신이 LINKE ViewBag.OrdersListBox = GetPermissionList (securityroles.Orders.Split ('')) 후 중단 권한을 설정하는 경우; 그것은 가치가 있습니까?ToArray()를 분할의 끝에 추가하는 것은 어떨까요? 어둠 속에서 그냥 쐈어 –

+0

ToArray(), 값을 선택하지 않고 동일한 문제를 추가하려고했습니다. 또한 제안 된 줄에 중단 점을 추가하고 전달되는 값이 정확합니다. 나는 왜 그 첫 번째 ViewBag 객체를 잘라내는 것이 작동하지 않는지 논리적으로 생각할 수 없다. – hyro78

답변

1

제가 생각하기에, 선택이 발생했을 때 선택한 값이 바인딩되는 것이므로 주문을 설정해야합니다. 사전에 아무 것도 선택하고 싶지 않으면 문자열 []을 전달하면됩니다. 이 게시물에서 Darin의 답변을 확인하십시오. 그는 모델을 사용하고 있지만 같은 개념이 뷰 백에 적용된다고 생각합니다.

Multiselect with ViewModel

+0

그 메모에 .... 뷰 모델을 사용하십시오 ... 뷰백을 사용하지 마십시오 ... – Jesse