我的情况是我的控制器动作根据参数返回不同的局部视图。 控制器动作类似于
[HttpGet]
public ActionResult List(int? page, string currentFilter, string searchString, EnumDocSort DocSort = EnumDocSort.DocIDesc, int id = 1)
{
if (searchString != null)
{
page = 1;
}
else
{
searchString = currentFilter;
}
DashboardListViewModel model = new DashboardListViewModel() { SearchString = searchString, SortOrder = DocSort, Page = page };
var docs = DocServiceImpl.GetDocsForCurrentUser();
docs = GetDocs(docs, model);
int pageNumber = (model.Page ?? 1);
ViewBag.ControllerName = "ClientDashboard";
model.PagedList = docs.ToPagedList(pageNumber, model.PageSize);
if(id==0)
{
return PartialView("List", model);
}
else if (Request.IsAjaxRequest())
{
return PartialView("Docs", model);
}
else
{
return View(model);
}
}
在上面的示例中,Docs
是List
部分视图的一部分。
<div class="result" id="result">
@Html.Partial("Docs", Model)
</div>
上面的代码是List.cshtml
的一部分。
设置搜索过滤器时,我必须返回Docs
视图。
问题出在浏览器历史记录中。因为一切都是由ajax制作的,所以我使用
history.pushState(stateObj,title,url);
但是在某些情况下,当我单击“在浏览器中返回”时,它将返回Docs
部分视图,但是我需要返回“更大”的视图,即List.cstml
。
我想知道使用浏览器历史记录时使用部分视图的最佳做法是什么?