我有一个使用 MVC4 和 Razor 的搜索页面。详情如下:
- 整页分为两部分。
- 左侧面板包含总共 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>
动作方法如下
公共 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 传递所有复选框项作为具有特定限制的查询字符串标题。一种选择是使用操作链接而不是提交按钮。但在那种情况下,我不知道如何将搜索面板的选定项目传递给操作方法。我们需要根据选择的搜索选项更新 URL 以优化 SEO。