后退按钮导致裸体局部视图

时间:2016-01-19 11:13:19

标签: ajax back-button asp.net-mvc-partialview

这是场景:我调用一个动作方法,它通过ajax返回PartialViewresult。结果将加载到另一个视图中。然后我导航到另一个页面,然后如果我按下浏览器后退按钮,之前加载的PartialViewResult显示为裸。裸体我的意思是没有加载容器视图和布局,只渲染普通的html元素。像这样:

enter image description here

有没有人面对并解决这个问题?

编辑:为了更好地了解这种情况,我的行动方法是:

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,当我按下浏览器后退按钮时,布局文件无法加载。

1 个答案:

答案 0 :(得分:0)

经过大量的挖掘和拔毛后,我意识到这只发生在Chrome中。我发现我需要从完整的html文档中提供不同的URL。因此,当通过AJAX向这个动作方法发送reuest时,我只需将任意查询字符串值附加到&#34;?Cabinet / Inbox&#34;,就像这样:

var url= "/Cabinet/Inbox?anythingYouWant"