1

MVC 4.0 を使用しており、コントローラーごとにルートを追加しようとしています。

さて、私の最初のコントローラーは CustomersController と呼ばれます。追加したルートは次のとおりです。

    routes.MapRoute(
        name: "Customer",
        url: "{controller}/{action}/{IdCustomer}",
        defaults: new { controller = "Customers", action = "Index", IdCustomer = UrlParameter.Optional }
    );

アプリケーションを実行すると、インデックス ページ (リスト) に次のリンクが表示されます。

http://localhost:6838/Customers/Create/5
http://localhost:6838/Customers/Edit/5
http://localhost:6838/Customers/Details/5
http://localhost:6838/Customers/Delete/5

わかりました!それは私が探しているものですが、今私の問題を始めてください。ItemsController という別のコントローラーを追加し (同じアクション - 作成/編集/詳細/削除)、同じルートを追加しようとしました:

    routes.MapRoute(
        name: "Item",
        url: "{controller}/{action}/{IdItem}",
        defaults: new { controller = "Items", action = "Index", IdItem = UrlParameter.Optional }
    );

しかし、結果は異なります...次のリンクを取得しています:

    http://localhost:6838/Items/Create?IdItem=1
    http://localhost:6838/Items/Edit?IdItem=1
    http://localhost:6838/Items/Detail?IdItem=1
    http://localhost:6838/Items/Delete?IdItem=1

なぜ..なぜ:'(機能していないのですか?なぜ、追加されたばかりの新しいルートではなく、最初のルートでのみ機能するのですか?!

敬具、ダン

4

1 に答える 1

2

私の答えを要約すると、あなたのルートはあまりにも曖昧です。より良い結果を得るには、より具体的にする必要があります (特に名前でルートを使用していない場合)。私は次のようなものに行きます:

routes.MapRoute(
    name: "Customers",
    url: "Customers",
    defaults: new { controller = "Customers", action = "Index" }
);
routes.MapRoute(
    name: "CustomerDetails",
    url: "Customer/{IdCustomer}",
    defaults: new { controller = "Customers", action = "Details", IdItem = UrlParameter.Optional }
);
routes.MapRoute(
    name: "CustomerEdit",
    url: "Customer/{IdCustomer}",
    defaults: new { controller = "Customers", action = "Edit", IdItem = UrlParameter.Optional }
);
/* and so on (then move on to Items) */

これらを名前で参照できるようになり、通常提供する多くの初歩的な情報 (アクションやコントローラーの詳細など) を省略できるようになりました。また、明示的なコントローラー/アクションではなく、ルートに名前が付けられているため、リンクの更新が容易になります。

@Html.RouteLink("Edit Customer", "CustomerEdit", new { IdCustomer = model.Id });

これを別のエリアで作成したり、定義したルートを変更して後で別のコントローラーに処理させたりすることができ、すべての RouteLinks は同じままにすることができます。

于 2012-09-10T01:38:50.677 に答える