0

asp.net mvc でルーティングを使用する方法が完全にはわかりません。ビューとコントローラーを、frontoffice と backoffice という 2 つのメイン フォルダーに整理しました。今、この方法で URL を構築する backoffice 内のアクションが必要です: frontoffice/controller/action/parameters そして、従来の方法でフォルダー frontoffice 内のもの: controller/action/parameter

私はこれらのルールを書きましたが、それらは正しくありません

routes.MapRoute(
    name: "Backoffice",
    url: "Backoffice/{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

routes.MapRoute(
    name: "Frontoffice",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

このように、frontoffice 内のすべてのアクションは、「backoffice」を使用して URL を構築します。どうすればいいですか?

4

1 に答える 1

0

ASP.NET MVC ではフォルダーは重要ではありません。

ルーティング エンジンが検索する場所に対応していない、何かをどのフォルダーに入れるかは問題ではありません。

方法は次のとおりです。

慣習はControllerという名前のフォルダーにコントローラーを置くことですが、これはルーティングに影響を与えるとは思わない単なる慣習です (影響する可能性はありますが)。

コントローラーに名前Controllerが追加されていることを確認し、ベース コントローラー クラスまたはIController. 例えば:

public class MyController : Controller

次に、ルーティングは URL 用です。

routes.MapRoute(
    "Backoffice",
    "backoffice/{controller}/{action}/{id}"

そのルートにたどり着くには、ディレクトリ構造とは関係のない2 つのものが必要です。

  • から派生Controllerまたは実装するコントローラーを持っているIController
  • そのコントローラーを適切に呼び出します。/backoffice/home/list/1

コントローラーをフォルダー構造に基づいて作成する場合は、namespace引数を使用して、名前空間がディレクトリ構造と一致していることを確認してください。

ルーティングを次のように変更します。

routes.MapRoute(
    "backoffice",
    "backoffice/{controller}/{action}/{id}",
    new[] { "MyProject.Backoffice.Controllers" }
);

次に、ディレクトリ構造は次のようになります。

MyProject 
  |
  - FrontOffice

  - BackOffice
    | 
    - Controllers
      |
      - MyController.cs

コントローラーの名前空間は次のようになります。

namespace MyProject.Backoffice.Controllers
{
    public class MyController
于 2012-08-30T13:03:38.817 に答える