вложенный нокаут foreach не работает

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

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

Я не могу найти способ отправить имя пользователя и имя роли в метод 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(имя пользователя.значение, имя роли.значение)


person user1714324    schedule 03.01.2013    source источник
comment
Knockout обрабатывает шаблоны (привязка foreach) на клиенте, а не на сервере.   -  person Rustam    schedule 04.01.2013
comment
Это одностраничное приложение, и привязка выполняется на клиенте.   -  person user1714324    schedule 04.01.2013
comment
Вы смешиваете код бритвы, выполняемый на сервере, с кодом на стороне клиента. Вам нужно будет проверить Roles.IsUserInRole внутри вашего контроллера и передать логическое значение в вашу модель представления.   -  person J. Mitchell    schedule 07.01.2013


Ответы (1)


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

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

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

    return Json(data);
}
person Sławomir Rosiek    schedule 06.01.2013