Razor で MVC4 を使用した検索ページがあります。詳細は次のとおりです。
- ページ全体が 2 つの部分に分かれています。
- 左側のパネルには、製品による検索、都市による検索など、合計 5 つの検索セクションが含まれています。各セクションにはチェック ボックス リストがあります。したがって、ユーザーは各セクションから複数のオプションを選択できます。
検索パネルは、送信ボタンのある部分ビューです。以下に示すように
@using (Html.BeginForm("ModelsList", "Model")) {
<div class="ModelListSearch Panel" style="width: 309px; float: left"> <div class="heading"> By Budget <div class="clear"> </div> </div> <!--heading--> <ul> @{ for (int i = 0; i < Model.BudgetDescription.Count; i++) { <li> @Html.HiddenFor(m => m.BudgetDescription[i].BudgetId) @Html.HiddenFor(m => m.BudgetDescription[i].Description) @Html.CheckBoxFor(m => m.BudgetDescription[i].Selected)@Model.BudgetDescription[i].Description </li> } } </ul>
アクション方法は以下の通り
public ActionResult ModelsList(int?brandId,int?bodyStyleId,int?fuelTypeId,int?transmissionTypeId,int?budgetID){
// this is called when first time page is loaded }
[HttpPost] public void ModelsList(NewCarSearchContainer searchData) { // 検索ボタンをクリックすると呼び出されます
}検索ボタンをクリックすると、検索結果が右側のパネルに表示されます。
検索ボタンをクリックすると、検索オブジェクト (NewCarSearchContainer) 全体がアクション メソッドにポストされ、このオブジェクトから選択された項目が検出され、それに応じて DAL レイヤーからデータが取得されます。
このページは正常に動作していますが、問題は、ユーザーが選択した検索オプションに従って URL が更新されないことです。post を使用しているため、URL は更新されないと思います。特定の制限があるクエリ文字列ヘッダーとしてすべてのチェック ボックス項目を渡す GET として GET を使用することはできません。1 つのオプションは、送信ボタンの代わりにアクション リンクを使用することです。しかし、その場合、検索パネルの選択したアイテムをアクションメソッドに渡す方法がわかりません。SEO を最適化するには、選択した検索オプションに従って URL を更新する必要があります。