如何只加载_Layout.cshtml一次?

时间:2013-10-10 18:06:01

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我有一个非常标准的MVC解决方案,包含_Layout.cshtml,Index.cshtml等。我试图在布局中加载一些必需的包只有一次,所以当我改变视图时,我只得到我需要的东西从服务器,而不是我已经拥有(捆绑,布局HTML等)。

关注此帖:MVC 3: How to render a view without its layout page when loaded via 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();
    }

如何只加载一次布局及其捆绑包?

1 个答案:

答案 0 :(得分:2)

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

幸运的是,这是一个很棒的OSS lib。

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/