図書館のようなウェブサイトを作っています。このライブラリでは、記事にカテゴリを含めることができ、そのカテゴリには、「世界>国>都市」のように最大2つの親カテゴリを含めることができます。
という名前のすべての記事について、ビューのすべての表示を単一のコントローラーに保持したいと思いますLibraryController
。そして、使用されている2つのアクションがあるArticle(string id)
とCategory(string[] ids)
「テンプル騎士団」という記事を表示するには、ユーザーは次のように入力する必要があります。 /library/article/the-templar-order
了解しました。これでカテゴリになります。私の頭の中には2つのアプローチがあります。この例は、「都市」カテゴリを表示することです。
/library/world-country-city
/library/world/country/city
/library/category/world/country/city
しかし、3つのパラメーターを取り、基本的にアクションを実行しないルートを作成する方法については、少し混乱しています。そして、最初のパラメータ「世界」を除いて、残りはこのように、オプションする必要があります:"/library/world/"
> "/library/world/country/"
>"/library/world/country/city/"
では、どうすればそのようなルートを作成できますか?
解決
RouteConfig.cs
// GET library/article/{string id}
routes.MapRoute(
name: "Articles",
url: "Library/Article/{id}",
defaults: new { controller = "Library", action = "Article", id = "" }
);
// GET library/
routes.MapRoute(
name: "LibraryIndex",
url: "Library/",
defaults: new { controller = "Library", action = "Index" }
);
// GET library/category/category/category etc.
routes.MapRoute(
name: "Category",
url: "Library/{*categories}",
defaults: new { controller = "Library", action = "Category" }
);
これは、次の2つのルートで実現できます。
// GET library/article/the-templar-order
routes.MapRoute(
name: "Articles",
url: "Library/Article/{id}",
defaults: new { controller = "Library", action = "Article" }
);
// GET library/world/country/city
routes.MapRoute(
name: "Category",
url: "Library/{*categories}",
defaults: new { controller = "Library", action = "Category" }
);
そして、ターゲットアクションへのわずかな変更
public ActionResult Category(string categories) {
categories = categories ?? string.Empty;
var ids = categories.Split(new []{'/'}, StringSplitOptions.RemoveEmptyEntries);
//...other code
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加