2013-10-10 37 views
0

我有一個非常標準的MVC解決方案,包括_Layout.cshtml,Index.cshtml等。我試圖只在一次佈局中加載一些必需的捆綁包,這樣當我更改視圖時,我只會得到我需要的服務器,而不是我已經有(捆綁,佈局HTML等)。如何只加載_Layout.cshtml一次?

下面這篇文章: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 Debugger中查看網絡面板顯示,我的所有捆綁js文件都會在每次頁面加載時重新加載。

一種觀點認爲,我想無需重新加載包和_layout加載的例子:

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

我如何可以加載佈局和它捆綁只有一次?

回答

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/

+0

我想保持這個作爲外的開箱越好。 MVC *有*有一些機制來處理這個。 – RobVious

+0

這不是它的工作方式。您可以創建部分請求或完整請求。部分請求完成了我之前描述的內容,而完整請求就是您現在正在做的事情。 –

+0

MVC只是一種模式。它沒有客戶端的任何東西在......你的「MVC」應用程序正在服務器上運行。 –