0

我有一个非常标准的 MVC 解决方案,其中包含 _Layout.cshtml、Index.cshtml 等。我试图在 Layout 中加载一些必需的包一次,这样当我更改视图时,我只能从服务器获得我需要的东西,而不是我已经拥有的(包、布局 html 等)。

在这篇文章之后: MVC 3:如何在通过 ajax 加载时呈现没有布局页面的视图?

我现在有一个更新的_ViewStart。但它似乎不起作用:

将以下 JS 视图模型作为 _Layout 中的包的一部分加载:

var subjectservice = new baseservice();  // baseservice is an empty function
subjectservice.subjects = {};
subjectservice.getSubjects = function () {
    alert('Hit');
    subjectservice.subjects = 'data';
    }
subjectservice.getSubjects();

预期的行为是:

  • 当我最初加载应用程序(使用 _Layout)时,无论我在哪个页面上,我都会得到主题
  • 导航时我不会再次调用 getSubjects - 只有当我专门从其他视图模型中调用它时

但是,无论我导航到哪个页面,我总是会收到警报消息,即使 Layout 已经加载。在 Chrome 调试器中查看网络面板显示我所有捆绑的 js 文件都在每次页面加载时重新加载。

我尝试在不重新加载包和_Layout的情况下加载的视图示例:

public ActionResult Index()
    {
        return View();
    }

如何仅加载一次 Layout 及其捆绑包?

4

1 回答 1

2

我相信您指的是使用 Ajax 和 Pushstate 的能力。

幸运的是,有一个很棒的 OSS 库。

https://github.com/defunkt/jquery-pjax

对您的 _ViewStart.cshtml 执行以下操作

@{ 
    Layout = Request.Headers["X-PJAX"] != null ? 
             "~/Views/Shared/_PjaxLayout.cshtml" : 
             "~/Views/Shared/_Layout.cshtml";  // uses the _Layout.cshtml for unsupported browsers
}

更多信息在这里
http://chrisseroka.wordpress.com/2012/04/24/getting-starteg-with-pjax-and-asp-net-mvc/

于 2013-10-10T18:47:39.547 回答