2013-01-03 5 views
0

다음 코드를 사용하여 사용자와 해당 역할을 표시하고 있습니다.knockout 중첩 된 foreach가 작동하지 않습니다.

내 viewModel에 두 개의 ObservableArray가있는 녹아웃을 사용하고 있습니다. 멤버와 역할.

중첩 된 foreach 루프 내부의 Roles.IsUserInRole (username, role) 메서드에 사용자 이름과 롤 이름을 보내는 방법을 찾을 수 없습니다.

내 모델의 각 구성원에게 이러한 역할을 보내려면 어떻게해야합니까?

<table> 
<thead> 
    <tr> 
     <th>Username 

     </th> 

      <th data-bind="foreach: roles"> 
       <span data-bind="text: roleName"></span> 
      </th> 
    </tr> 


</thead> 
<tbody data-bind="foreach: members"> 
     <tr> 
      <td data-bind="text: userName"> 
      </td> 
       <td data-bind="foreach: roles"> 

        @using (Html.BeginForm("UserToRole", "Main")) 
        { 
         <input type="hidden" data-bind="value: members().userName" name="username" /> 
         <input type="hidden" data-bind="value: roleName" name="rolename" /> 

         <input type="checkbox" name="ischecked" onclick="this.form.submit();" value="true" checked="@System.Web.Security.Roles.IsUserInRole(username.value, rolename.value)" /> 

        } 

       </td> 

     </tr> 


</tbody> 

문제는 : System.Web.Security.Roles.IsUserInRole (username.value, rolename.value)

+1

녹아웃은 서버가 아니라 클라이언트에서 템플릿을 처리합니다 (foreach 바인딩). – Rustam

+0

이것은 단일 페이지 응용 프로그램이며 바인딩은 클라이언트에서 수행됩니다. – user1714324

+0

서버에서 실행되는 면도기 코드를 클라이언트 측 코드와 혼합합니다. 컨트롤러 내에서 Roles.IsUserInRole을 확인하고 뷰 모델에서 부울 값을 전달해야합니다. –

답변

1

당신은 모델에 추가 속성을 추가 할 수 있으며하여 채우기 @ 해당 데이터를 가져 오는 동안 서버 쪽에서 IsUserInRole을 호출합니다.

public ActionResult GetData() 
{ 
    var data = ... 

    foreach (var role in data.Roles) 
    { 
     role.HasRole = Roles.IsUserInRole(username, role.RoleName); 
    } 

    return Json(data); 
} 
관련 문제