后退按钮导致裸露的局部视图
Back button causes naked partial view
场景如下:我通过 ajax 调用 returns PartialViewresult 的操作方法。结果加载到另一个视图中。然后我导航到另一个页面,在此之后,如果我按下浏览器后退按钮,先前加载的 PartialViewResult 将显示为裸体。裸体是指不加载容器视图和布局,只呈现普通的 html 元素。像这样:
有没有人遇到并解决过这个问题?
编辑:为了更好地理解这里的情况,我的操作方法是:
public ActionResult Inbox(int pageNumber = 1, int pageSize = 10, string filter = null)
{
var inboxItems = GetInboxItems(filter);
PagedList<InboxItem> pagedList = inboxItems.ToPagedList(pageNumber, pageSize);
pagedList.DisplayPage(pageNumber);
InboxViewModel vm = new InboxViewModel(pagedList);
if (!Request.IsAjaxRequest())
return View(vm);
return PartialView(vm);
}
在 Inbox.cshtml 文件中,如果请求是 ajax,我会加载布局:
@model Dokcentra.Models.InboxViewModel
@if (!Request.IsAjaxRequest())
{
Layout = "~/Views/Shared/_Cabinet.cshtml";
}
我认为最后一段代码是导致此问题的原因,因为布局文件 _Cabinet.cshtml 包含所有 html、css 和 js,当我按下浏览器后退按钮时布局文件未加载。
经过大量的挖掘和拉扯,我意识到这只发生在 Chrome。我发现我需要提供与完整 html 文档不同的 url。因此,当通过 AJAX 向此操作方法发送请求时,我只需将任意查询字符串值附加到“?Cabinet/Inbox”,如下所示:
var url= "/Cabinet/Inbox?anythingYouWant"
场景如下:我通过 ajax 调用 returns PartialViewresult 的操作方法。结果加载到另一个视图中。然后我导航到另一个页面,在此之后,如果我按下浏览器后退按钮,先前加载的 PartialViewResult 将显示为裸体。裸体是指不加载容器视图和布局,只呈现普通的 html 元素。像这样:
有没有人遇到并解决过这个问题?
编辑:为了更好地理解这里的情况,我的操作方法是:
public ActionResult Inbox(int pageNumber = 1, int pageSize = 10, string filter = null)
{
var inboxItems = GetInboxItems(filter);
PagedList<InboxItem> pagedList = inboxItems.ToPagedList(pageNumber, pageSize);
pagedList.DisplayPage(pageNumber);
InboxViewModel vm = new InboxViewModel(pagedList);
if (!Request.IsAjaxRequest())
return View(vm);
return PartialView(vm);
}
在 Inbox.cshtml 文件中,如果请求是 ajax,我会加载布局:
@model Dokcentra.Models.InboxViewModel
@if (!Request.IsAjaxRequest())
{
Layout = "~/Views/Shared/_Cabinet.cshtml";
}
我认为最后一段代码是导致此问题的原因,因为布局文件 _Cabinet.cshtml 包含所有 html、css 和 js,当我按下浏览器后退按钮时布局文件未加载。
经过大量的挖掘和拉扯,我意识到这只发生在 Chrome。我发现我需要提供与完整 html 文档不同的 url。因此,当通过 AJAX 向此操作方法发送请求时,我只需将任意查询字符串值附加到“?Cabinet/Inbox”,如下所示:
var url= "/Cabinet/Inbox?anythingYouWant"