ナビゲーションとブレッドクラムに関するいくつかの投稿を見ましたが、exaxtと同じ問題は見つかりませんでした。ただし、ある場合はご容赦ください。ありがとうございました。
私の場合 :
Interests Profiles
| |
|_Interest Area 1 |-Profile Area 1
| | |
| |_Interest Area 1.1 |_List of Books
| | |
| |_List of Books |_Book Detail
| |
| |_Book Detail
|_Interest Area 2
|
|_List of Books
|
|_Book Detail
階層はデータベースに保存されます。エントリポイントのインタレストとプロファイルは固定されています。そこから私は子供たちがどうなるかわかりません。
子がもう残っていない場合、最後に選択された(サブ)カテゴリの値に基づいて本が取得されます。
ここで2つの問題があります。1つ目:適切なルートを作成する。私が望む方法は次のとおりです。
/books/{id}/{interestareaname}/{subinterestareaname}/{books}/{page}
ここで、interestareanameはユーザーフレンドリーなURLに追加され、階層を下る限り繰り返され続けます。その場合、出力は次のようになります。/ books / 1 / project-management / prince2 / books / 1これは、ページングされたリストページのページ1にあるprince2の本を示しています。
ただし、レベルが1つしかない場合、ルートにはinterestareanameが1つしかないため、次のようになります。
/book/{id}/{interestareaname}/{books}/{page}
問題番号1を解決するために私がしたこと:
routes.MapRoute(
"Details",
"view/details/{id}/{booktitle}",
new { controller = "book", action = "Details", id = "*", booktitle= "*"});
routes.MapRoute(
"interests",
"books/{id}/{level1}/{level2}/{level3}/{page}",
new { controller = "book", action = "books", level1 = "*", level2 = "*", level3 = "*", id = "0", page = UrlParameter.Optional }
);
routes.MapRoute(
"profiles",
"books/{id}/{level1}/{level2}/{level3}/{page}",
new { controller = "book", action = "books", level1 = "*", level2 = "*", level3 = "*", id = "0", page = UrlParameter.Optional }
);
最大レベルを設定する必要があると述べて、これに到達しました。それは私がそれをよりダイナミックにする方法を知らなかったからです。
ここでの問題は、関心カテゴリとプロファイルカテゴリを区別することです。同じルートを作成しましたが、名前を変えて、サイトマップの作成にルート名を追加しました。
私が抱えている2番目の問題は、サイトマップとブレッドクラムです。MVCsitemapproviderとDynamicNodes機能を使用しています。
サイトマップでは、詳細ページの表示に問題があります。なぜなら、本はプロフィールと興味の両方に表示されるからです。また、一部の本は複数の関心分野またはプロファイルに表示されます。いずれの場合も、その本にたどり着くまでの道のりを見たいと思います。
まず、各本の詳細ページをサイトマップに追加しましたが、それはおかしなことでした。また、サイトマップではうまく処理されない重複エントリを作成します。他のオプションは、クエリ文字列でリストページのルートデータを詳細ページに渡すことでしたが、それはひどく見えたので、クエリ文字列を解析してブレッドクラムを模倣するロジックを追加する必要があります。最低レベルの。
私は今何夜も過ごしましたが、それでも理解できません。誰かが私を助けたり正しい方向に向けたりしてくれるなら、私はとても感謝しています。