2 つのエリアと共通エリアを含む MVC3 サイトがあります。また、アイテムのリストをページ分割するために指定されたルートもあります。私のRegister_Routes
方法は次のようになります。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Paginate", // Route name
"{controller}/Paginate/{itemsPerPage}/{pageNumber}/{searchString}", // URL with parameters
new { controller = "Home", action = "Index", itemsPerPage = SiteSettings.ItemsPerPage, pageNumber = 1, searchString = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
私が気付いた (そして理解していない) ことは、ホームページからログアウトすると、ログイン ページからのリダイレクトが次のようになることです。
http://localhost:62695/Account/LogOn?ReturnUrl=%2fHome%2fPaginate
...ログインすると、次の URL を除いて、自分のホームページが表示されます。
http://localhost:62695/Home/Paginate
この時点で、ルートマップで何かを台無しにしたことはかなり確信していますが、それは正しいように思えます. 私は何を間違っていますか?
提案ごとに更新 して、ルートを次のように変更しました。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Paginate", // Route name
"{controller}/Paginate/{itemsPerPage}/{pageNumber}/{searchString}", // URL with parameters
new { controller = "Home", action = "Index", searchString = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
...そして、ホームインデックスページは実際に正しく機能しているように見えますが、現在、ページネーションは機能していません:
return RedirectToAction("Paginate", new { itemsPerPage = SiteSettings.ItemsPerPage, pageNumber = 1, searchString = string.Empty });
Admin\HomeController で次の URL が生成されます。
http://localhost:62695/Admin/Users/Paginate?itemsPerPage=25&pageNumber=1
だから私はまだここで何か間違ったことをしています。
UPDATE 2
OK、これが私が望んでいた方法で動作させる方法です: 私のRegisterRoutes
方法は次のようになります:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
null,
"{area}/{controller}/Paginate/{itemsPerPage}/{pageNumber}/{searchString}", // URL with parameters
new {area = string.Empty, controller = "Home", action="Paginate", searchString = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{area}/{controller}/{action}/{id}", // URL with parameters
new {area = string.Empty, controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
...しかし、これではルーティングの問題を解決するには不十分でした。これに加えて、ルートをエリア登録に追加する必要がありました。私の AdminAreaRegistration は次のようになります。
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
null,
"Admin/{controller}/Paginate/{itemsPerPage}/{pageNumber}/{searchString}", // URL with parameters
new { controller = "Home", action = "Paginate", searchString = UrlParameter.Optional } // Parameter defaults
);
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
これにより、接続の変更に加えて、RedirectToRoute
すべての URL がきれいになり、同時に機能するようになりました。すべての回答が私の目標を達成するのに役立ちました。私は全員を +1 し、道に最も近い回答を選択しました。