2013-01-03 4 views
0

Я использую следующий код для отображения пользователей и их ролей.нокаут вложенный foreach не работает

Я использую нокаут, где у меня есть два ObservableArray в моем представленииModel: члены и роли.

Я не могу найти способ отправить имя пользователя и ролевое имя методу Roles.IsUserInRole (имя пользователя, роли) внутри вложенного цикла foreach.

Что я могу сделать, чтобы отправить эти роли каждому члену моей модели?

<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 внутри вашего контроллера и передать логическое значение в вашей модели viewmodel. –

ответ

1

Вы можете добавить дополнительное свойство для вашей модели и заполнить его вызывая IsUserInRole на стороне сервера при получении этих данных:

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

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

    return Json(data); 
}