3

次のことを実行しようとしていますが、#2で「リソースが見つかりません」というエラーが表示されます。ルーティングが正しく構成されていないためと想定します。

必要なURL:

1)domain.com/Customer

2)domain.com/Customer/1*機能しません

3)domain.com/Customer/All

public ActionResult Index(int? id)
{
    var viewModel = new CustomerViewModel();

    if (!id.HasValue)
        id = 1; // ToDo: Current Logged In Customer Id

    viewModel.Load(id.Value);

    return View(viewModel);
}
public ActionResult All()
{
    return View(CustomerModel.All());
}

私のRouteConfigにはデフォルトのルート設定があり、無駄にルートを追加しようとしました。

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

新しいルートを設定しようとしても機能しないため、除外しました。

4

2 に答える 2

6

ルートはdomain.com/Customer/Index/1に正規化されます。ルートの後続の部分がある場合、その値がデフォルトになるという理由だけで、以前のコンポーネントを削除することはできません。この場合、見つからない「1」という名前のアクションを探しています。

編集

目的のルートがdomain.com/Customer/IDの場合、そのようなルートをルートテーブルに追加できます。

routes.MapRoute(
    name: "CustomerAll",
    url: "Customer/All",
    defaults: new { controller = "Customer", action = "All" }
);
routes.MapRoute(
    name: "CustomerByID",
    url: "Customer/{id}",
    defaults: new { controller = "Customer", action = "Index" }
);

これらのより具体的なルートは、デフォルトルートの前に来る必要があります。

于 2012-12-05T00:36:50.983 に答える
2

デフォルトのルートの前にこのルートを追加してみてください

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

また、URLはCustomerではなくCustomersで始まることに注意してください。

希望のURLは次のようになります:domain.com/Customers/1の代わりにdomain.com/Customer/1

于 2012-12-05T00:36:53.380 に答える