【问题标题】:Back button causes naked partial view后退按钮导致裸局部视图
【发布时间】:2016-04-24 20:05:46
【问题描述】:

以下是场景:我调用了一个通过 ajax 返回 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,并且当我按下浏览器后退按钮时,布局文件不会加载。

【问题讨论】:

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


    【解决方案1】:

    经过大量挖掘和拉扯头发后,我意识到这只发生在 Chrome 中。我发现我需要提供与完整 html 文档不同的 url。因此,当通过 AJAX 向此操作方法发送请求时,我只需将任意查询字符串值附加到“?Cabinet/Inbox”,如下所示:

    var url= "/Cabinet/Inbox?anythingYouWant"
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 2012-11-27
    相关资源
    最近更新 更多