0

何かが完全に欠けているかどうかはわかりませんが、EFとロールベースの認証を使用する典型的なMVCWebアプリケーションがあります。

public class User
{
    public int UserId { get; set; }
    public string Name { get; set; }
    public IList<Role> UserRoles { get; set; }
}

public class Role
{
    public int RoleId { get; set; }
    public string Name { get; set; }
    public IList<User> RoleUsers { get; set; }
}

理想的には、上記の場合、単一の編集画面でユーザー名を更新し、ユーザーロールの追加/削除操作も可能にします。たとえば、名前の入力フィールドを持つフォーム、それぞれのユーザーロールのテーブル削除ボタンのある行と、追加ボタンのある役割のドロップダウンリスト。

保存要求が発行されるまでデータベースへの役割の追加/削除を永続化せずに、ビューモデル(ユーザー)で編集を実行するにはどうすればよいですか?

代わりに、追加操作を考えるのが最善かもしれません。新しいユーザーを挿入する場合、最初にユーザーを挿入せずに、そのユーザーの役割のコレクションを作成するにはどうすればよいでしょうか。

前もって感謝します。

4

1 に答える 1

0

これをもう少し調べた後、Phil Haackedは、ビューモデルをリストにバインドすることに関する記事を書きました。ここにあります...

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

おそらく、このアプローチを使用して、エンティティプロパティの入力と、サブオブジェクトの上記のメソッドを使用してバインドされた関連する入力のコレクションを持つ単一のフォームを作成できたはずです。これには、親エンティティのナビゲーションプロパティごとに重複したリストプロパティが必要になると思いますが、これは私にとってはストライキです。

複雑なオブジェクトのコレクションを持つエンティティを追加する場合、このメソッドは、同じビューで複雑なオブジェクトのすべてのプロパティをエレガントに入力する方法も解決しません(親エンティティはメモリにのみ存在するため)-おそらく最も簡単なアプローチは編集フォームを含む部分ビュー?

簡単にするために、編集ビューを変更して、エンティティの基本プロパティのみを編集し、関連するコントローラーにリダイレクトするサブオブジェクトへの個別のリンクを設定しました。ユーザーの例を使用すると、追加操作は次のようになります。

  • ユーザー/編集/{user_id}ビュー->ユーザー名、メールアドレスなどを入力します。
  • [保存]->[ユーザー/インデックスまたはユーザー/詳細/{user_id}にリダイレクト]をクリックします
  • このユーザーは、[ロールの管理]リンクをクリックすると、[/ Role / Index/{user_id}にリダイレクト]リンクを使用できます。
  • ページには、このユーザーの役割の表が表示され、追加/編集などが可能です。

編集:

また、これが他の誰かを助ける場合に備えて。

/Role/Indexデフォルトですべてのロールを一覧表示するようにアクションを設定しましたが、UserIdパラメーター( /Role/Index/{user_id})も受け入れます。UserIdを指定すると、アクションは/Role/IndexForUserデータモデルがUserエンティティである別のビュー()を返します。これはデフォルトのビューと同じですIndexが、ユーザーに関連付けられたロールのみを一覧表示し、「ユーザーを削除する」などのコンテキストリンクを表示します。役割'。

于 2012-07-27T09:08:34.227 に答える