2

私は現在、かなり広範なメインレイアウトページがあるMVCサイトで作業しています。これはデータベースからのデータに依存しており、データベースには、レイアウトに何を含めるかなどの固有のロジックが含まれています。

私のコントローラーアクションのほとんどは、このレイアウト内でレンダリングされます。これをどうやって動かすのかわかりません。Webフォームのページをマスターするために使用されるため、すべてのロジックはマスターページにあります。一般的なレイアウトロジックを実現するためのメカニズムがいくつかありますが、それを実現するためのベストプラクティスの方法を探しています。

オプションは次のとおりです。

  • すべてのコントローラーアクションでロジックを複製します(実際にはオプションではありません)
  • ロジックを別のクラスに抽出し、コントローラーアクションから呼び出します
  • すべてのコントローラーは、OnActionExecutingメソッドをオーバーライドするベースコントローラーから継承します。これにより、ロジックが実行され、TempDataに必要なデータが返されます。
  • cshtmlの「RenderAction」を使用して必要なコントローラーアクションを呼び出し、レイアウトをより小さな部分ビューに抽出します

私に開かれた他のオプションや推奨事項はありますか?

4

1 に答える 1

3

私があなたを正しく理解しているなら、私は部分的な行動を使うでしょう

@Html.Action("{ActionName}", "{Controller}", new { roleName= "Admin" })

アクションパーシャルは、タイプの専用コントローラーアクションメソッドを呼び出します

   [ChildActionOnly]
    public ActionResult _TopNav(string roleName)

このようにして、複製せずにアプリケーション全体に伝播する繰り返しロジックを設計できます。

さらに良いことに、_Layoutが特権ベースのリンク生成を処理する場合、ロールIDを渡し、エンドユーザーに表示される内容とナビゲーションボタンが指す内容を制御できます。

于 2013-01-15T01:06:47.447 に答える