2011-10-21 17 views
0

イベントを編集するユーザーがいるMVC3アプリケーションを開発しています。 「管理者」と「プロモーター」の両方が自分のイベントを編集できる必要があります。ビューは同じです。 ...私の構造は、レイアウトページがプロモーターで異なっている必要がありますので、両方の分野では、私は別のコントローラを使用しています。このコントローラ/エリア間で編集ページを共有する

/admin/events/edit/1 
/promoter/events/edit/1 

に少し似ている彼らは非常に異なるオプションを持っているので、私は私の管理者とプロモーターのための領域を作成しました/管理者エリア。 Offcourseこれは重複につながり、これは私がより良い解決策を探しているところです。私は '共有'フォルダに置くことができますが、どのように私は同じビューを提供する2つの方法(各コントローラに1つ)を持つことを防ぐには?いくつかのオプション:

  • イベント編集を実装する同じ基本クラスのサブクラスを両方ともサブクラス化します。これは基本クラスのみを持つことができるので、オフコースに一度しか使用できません。私が他の共有機能を持っていれば、これはすべて基本クラスに入るはずです。
  • 両方のコントローラの編集機能を別のクラスに委譲する(EditEventController?)
  • ページが部分的にのみ更新されるようにAJAXフォームを使用します。これは状況を複雑にする。

簡潔に:MVC 3アプリケーションのさまざまな領域/コントローラ間で編集ページを共有するにはどうすればよいですか?

コメントが小さすぎたよう@Added:

私はその役割のために、サイトの特定のビューをしたいので、私は役割の面積のを使用しています。サブセクションのイベント/ユーザーと他の管理者用のものを含む管理領域のように。この管理領域には、管理領域のイベントセクションを処理するeventscontrollerがあります。別の領域はプロモーターの領域である。それはサイトの論理的な分割のように思えました(領域ごとのレイアウトを制御できるので、特定の役割を要求するためにベースクラスコントローラを使用できます)。これは実用的ではないと言っていますか?アイデアは1つのイベントコントローラが好きですが、現在の役割に応じて異なるレイアウトページ/メニューを取得するにはどうすればよいですか?

答えて

0

これは1つのコントローラ内にある必要があります。あなたが役割とルーティングで「エリア」をミックスしているような感じです。

これらのURLはどちらも、1つのアクションメソッドにマッピングする必要がありますが、コントローラ/エリアは異なりません。

"イベント"は領域で、[Authorize]属性またはカスタム属性を使用して、管理者とプロモーターの両方に表示させることができます。

アプリケーション内の各論理コンポーネントの領域を試してみてください。また、DDD-発言を希望する場合は、それぞれ「集約」してください。

だからあなたのイベントエリアに、あなたはこのようなルートかもしれない:

routes.MapRoute(
       "Default",            
       "{role}/{controller}/{action}/{id}",     
       new { controller = "Events", action = "Index", id = "" }, 
       new { role = new RoleBasedRouteConstraint() } // or you could use regex.. 
      ); 

をと役割に対応する文字列値に制限する役割ルートトークンにルート制約を使用して、に加えて、役割ベースの権限をコントローラに設定します。

+0

イベントコントローラにマップされる '/ admin/event/edit/1'のようなURLをどのように持つのですか?どのような役割の下でコントローラがアクセスされているのかをどのようにして知ることができますか? – Gluip

+0

@Gluip - コントローラ上で '[Authorize(Roles =" Admin、Promoter ")]'を使うことができます - それはどういう意味ですか? – RPM1984

関連する問題