2009-04-03 4 views
0

У меня есть проект ASP.NET MVC на C# с использованием аутентификации по формам, а Active Directory - это поставщик членства (пользователи входят в систему со своим существующим uid/pwd). Однако я хотел бы, чтобы роли предоставлялись aspnet_Roles (таблица по умолчанию, созданная приложением). В моем Web.config у меня есть: с настройкой по умолчанию для этого узла.Отобразить список доступных ролей из базы данных как флажки, такие как NerdDinner, со странами

Я успешно выполнил образец приложения NerdDinner и хочу использовать то, что я узнал. В моем приложении я использую шаблон репозитория, как и NerdDinner. В NerdDinner он показывает, как использовать метод Helper для заполнения DropDownList. Я хотел бы сделать то же самое, но вместо стран и DropDown я хотел бы вытащить Роли из таблицы и заполнить флажки.

В моих UsersController.cs у меня есть:

// 
// ViewModel Classes 
public class UserFormViewModel 
{ 
    // properties 
    public User User { get; private set; } 
    public SelectList Roles { get; private set; } 

    // Constructor 
    public UserFormViewModel(User user) 
    { 
     User = user; 
     Roles = new SelectList(Roles.All,); //this is where I have problems 
    } 
} 

На мой взгляд, у меня есть (что, конечно, не будет работать):

<ul> 
    <% foreach (var role in Roles as IEnumerable<SelectListItem>)) { %> 
    <li><%= Html.CheckBox(role.ToString())%> <%= role.ToString() %></li> 
    <% } %> 
</ul> 

P.S. Я новичок в .NET, но мне это нравится! Исправьте меня, если я ошибаюсь, но я думаю, что эта проблема связана с определениями коллекций и типов?

Кроме того, я знаком с использованием инструмента конфигурации ASP.NET для добавления Ролей и пользователей, но я хотел бы создать пользовательский раздел User Admin.

ответ

0

Что-то вроде этого?

<li><%= Html.CheckBox(role.ToString(), 
    Roles.IsUserInRole(Model.User.Identity.LoginName, role.ToString())) %> 
    <%= role.ToString() %> 
</li> 

Брус довольно вспомнить точный синтаксис ролей в поставщике членства asp.net, но это что-то вдоль этих линий.

+0

Эй Morph Я считаю, что это будет: <% = Html.CheckBox (role.ToString(), Roles.IsUserInRole (Model.User.UserName, role.ToString()))%> но как бы я начал цикл? Я пытаюсь: <% foreach (роль var в роли как IEnumerable ) {%>, но это не работает – robnardo

0

Похоже, что мне не нужен класс UserFormViewModel. Морф помог мне. Это то, что я делаю:

<ul>    
    <% 
     string[] allroles = Roles.GetAllRoles(); 
     foreach (string role in allroles) { 
    %> 
    <li> 
     <%= Html.CheckBox(role.ToString(), Roles.IsUserInRole(Model.UserName, role.ToString())) %> 
     <%= role.ToString() %> 
    </li>     
    <% } %> 

</ul> 
+0

это тоже работает: foreach (роль строки в Roles.GetAllRoles()) {} – robnardo

+0

А я вижу, как сделать цикл. Да, роли в простой строковой переменной :). – Morph