スコープをフィルタリングするためのいくつかのパラメータを受け取るコントローラアクションを作成しようとしていますが、最後のパラメータは結果をページングするのに必要なページングパラメータです。MVC4ルートのオプションの中間パラメータ
//Example Action
public ActionResult Details(string time, string regionscope, string localscope = null, int page = 1) {
}
//RouteConfig.cs
routes.MapRoute(
name: "LocationWithLocalScopeRoute",
url: "/Details/{time}/{regionscope}/{localscope}/{page}",
defaults: new
{
controller = "Location",
action = "Details",
localscope = UrlParameter.Optional
}
);
とにかく私はlocalscope
パラメータを除外したが、まだ(まだかなりのURLを維持しながら)page
パラメータがコントローラによって、ページ番号として解釈することができありますか?
// Test URLs
/Details/May-17/Mid/1
/Details/May-17/Mid/Bumville/1
私は既存のルートの前にルートを追加することができます知っている:
//RouteConfig.cs
routes.MapRoute(
name: "LocationWithNoLocalScopeRoute",
url: "/Details/{time}/{regionscope}/{page}",
defaults: new
{
controller = "Location",
action = "Details"
}
);
私も、私は他のパラメータのいずれかの前にpage
を置くことができます実現します。
routes.MapRoute(
name: "LocationWithLocalScopeRoute",
url: "/Details/{page}/{time}/{regionscope}/{localscope}",
defaults: new
{
controller = "Location",
action = "Details",
localscope = UrlParameter.Optional
}
);
テストURLが動作している間に、1つのルート定義ですべてを動作させる方法があるかどうか疑問に思っていました。
短い回答は(複数のルートを作成しない限り)いいえです。最後のパラメータだけがオプションになります。 –
@StephenMuecke私が追加した代替オプションのうち、お勧めしますか?あるいは、別の方法があれば、私はそれを読むことができます。 – SomeShinyObject
個人的には、第1のオプションを使うつもりです。なぜなら、ページ番号を最後に持つURLとして、より意味をなさないと思うからです。 –