2

私はコントローラーを持っています

 public ActionResult UsersInRoles()
    {           
        using (var ctx1 = new UsersModel())
        {
            var model = new UsersInRolesViewModel();
            model.UserProfiles = ctx1.UserProfiles.ToList();
            model.UserRoles = ctx1.UserRoles.ToList();
            return View(model);
        }            
    }

これらのモデルの両方をビューに渡しています。 UserRoles システムで考えられるすべてのロールが含まれています。ここで、ユーザーが登録されているすべてのロールのコントローラーで配列を取得し、それをビューにも渡す必要があります。これにより、ユーザーが使用可能なロールのボックスにロールを表示しないことがわかりますに登録済みです。

これどうやってするの?

2 つのオプションが表示されます。

linqステートメントを使用して一度にデータを取得しようとする方法、またはユーザーが登録されているロールの配列を介してロールの完全なモデルを渡し、ビューにまたはなどを表示できるようにする方法はありますか?

ユーザーモデルに関連する AUX クラス:

 public class UsersModel : DbContext
{
    public UsersModel()
        : base("name=UsersConnection")
    {}
    public DbSet<UserProfile> UserProfiles { get; set; }
    public DbSet<Roles> UserRoles { get; set; }
    public DbSet<UsersInRoles> UsersInUserRoles { get; set; }
}

  public class UsersInRolesViewModel
{
    public IList<UserProfile> UserProfiles { get; set; }
    public IList<Roles> UserRoles { get; set; }
    public IList<ut_GMUTempData> GMUTempData { get; set; }
}
4

2 に答える 2

0

ログインしたユーザーの役割だけが必要で、Internet Applicationテンプレートのデフォルトの単純なメンバーシップを使用する場合、モデル バインディングはまったく必要ありません。次のように、ビューでログインしているユーザーの役割を取得できます。

@{
    // r will be a string[] array that contains all roles of the current user.
    var r = Roles.GetRolesForUser();         
}

他のユーザーのロールを取得したい場合は、そのメソッドにユーザー名を入れてください:

@{
    // r will be a string[] array that contains all roles of the entered username.
    var r = Roles.GetRolesForUser("username"); 
}

この場合、ユーザー名をモデルに送信するだけです。

アップデート:

また、UserID がある場合は、次のようにユーザー名を取得できます。

@{
    SimpleMembershipProvider provider = new SimpleMembershipProvider();
    string uname = provider.GetUserNameFromId(id);

    // r will be a string[] array that contains all roles of the entered username.
    var r = Roles.GetRolesForUser(uname); 
}
于 2013-07-19T08:52:59.723 に答える