2013-08-22 33 views
2

我正在使用ASP.NET MVC 4.我有一個稍重的「導航菜單」和「標題」,這對所有頁面都很常見。如何在不重新加載MVC 4中的佈局的情況下加載視圖?

我已經在佈局中創建了所有菜單和標題,但在每個導航中,瀏覽器重新加載菜單。有沒有任何可能的方法來防止重新加載佈局頁面?

我正在使用_ViewStart.cshtml將視圖與佈局綁定。

+0

你能提供代碼示例或解釋你的代碼是如何工作的嗎?你能解釋一下問題是什麼嗎?重複使用導航菜單或標題非常常見,所以我不確定問題所在。 –

+0

您可以使用部分視圖。 –

+1

您可以使用部分視圖,同時單擊選項卡上的make和ajax調用以獲取您的局部視圖,然後替換您的內容。 –

回答

6

假設這將是你的菜單HTML渲染

<ul class="menu"> 
     <li><a href="/about/index">About</a></li> 
     <li><a href="/contact/index">Contact</a></li> 
    </ul> 
    <div id="page-content"> 
    </div> 

您的視圖頁面會在下面的結構局部視圖創建

About/index.cshtml 
Contact/index.cshtml 

注: MVC局部視圖不會有<html> or <head> or <body> ,它只會有內容,類似於ASP.Net中的用戶控件。您cannot use @section in partial views

現在,所有你需要的是用ajax加載此部分內容和使用JavaScript

$(document).ready(function(){ 
$("ul.menu a").click(function(e){ 
    e.preventDefault(); // prevent default link button redirect behaviour  
    var url=$(this).attr("href"); 
    $('#page-content').load(url); 
}); 
}); 

希望這將幫助你把它的主要佔位符DIV的頁面內容!

1

如果導航菜單和標題對於所有頁面都是通用的,那麼您應該嘗試緩存導航菜單和標題。

如果你得到的觀點是由

  1. 導航
  2. 菜單內容

起來,你可以使用一個佈局

@Html.RenderAction("header") 
@Html.RenderAction("navigation") 
@Render.Body() 

其中「標題「和」導航「動作被大量緩存。

@Haacked提到這真棒此處的博客文章http://haacked.com/archive/2009/05/11/donut-hole-caching.aspx

這種方法清晰地分離出來你的頭和導航的關注。並且您可以專注於當前調用的操作顯示的實際內容。

希望這有助於

注:這個答案超級簡單,你將不得不如果您的導航基於用戶訪問的網頁的角色/權限,同時執行高速緩存考慮到動態參數之類的東西。

相關問題