0

コントローラーとアクションを次のように設計したいと思います。

「StaticPage(string page)」と呼ばれるコントローラーごとに 1 つのアクションがあります (そこから派生する BaseController を作成することを考えましたが、ここでは、コントローラーとしての「Suite」についてのみ説明します)。
このアクションは、ほとんどが HTML コードを含み、モデルを含まないビューを返します。したがって、20 個の単純なビューに対して 20 個のアクションを作成する代わりに、1 つのアクションでそれらを管理し、パラメーターで区別したいと考えています。

しかし、同じコントローラーで、モデルを含むビューを返し、より複雑でデータベース関連のことを行うアクションを持たせたいと思います。最初は、次のルートを考えました (注: このシナリオでは、「製品」という領域が存在します)。

   context.MapRoute(
       "Product_default",
       "Product/{controller}/{action}",
       new { action = "index"}
   );

   context.MapRoute(
      "StaticPage_Route",
      "Product/{controller}/{page}",
      new { action = "StaticPage", page = UrlParameter.Optional
   );

では、View TechnicalSpecification.cshtmlTrivialPage.cshtmlを取得したとします。

/製品/スイート/技術仕様

アクション「TechnicalSpecification」を検索して見つける必要がありますが、試してみると

/製品/スイート/TrivialPage

また、最初にアクション「TrivialPage」を検索する必要があります。しかし、それが見つからない場合は、ページと呼ばれるパラメーターとして処理する必要があります (上記のルートのように)。

しかし、私は本当に知りません、この権利を管理する方法。カスタム ActionFilter 属性を設定せずに、OnActionExecuted(...) で何かをチェックし、「StaticPage」アクションを呼び出す方法はありますか?

4

1 に答える 1

0

私は自分で解決策を見つけました。
HandleUnknownAction をオーバーライドするとうまくいきます。コードは次のようになります。

protected override void HandleUnknownAction(string actionName)
        {
            this.View(actionName).ExecuteResult(this.ControllerContext);
        }

また、ルート「StaticPage_Route」は不要になったため、そのルートを削除しました。

これにより、単純なビューをそれぞれのビュー フォルダーに配置するだけで済み、オーバーライド メソッドは利用可能な場合にそれらを呼び出します。
これにより、多くの簡単なコードを節約でき、それらのサイトを実装する必要がなくなります。

于 2012-09-28T13:12:24.090 に答える