我正在使用ASP.NET MVC 4.我有一個稍重的「導航菜單」和「標題」,這對所有頁面都很常見。如何在不重新加載MVC 4中的佈局的情況下加載視圖?
我已經在佈局中創建了所有菜單和標題,但在每個導航中,瀏覽器重新加載菜單。有沒有任何可能的方法來防止重新加載佈局頁面?
我正在使用_ViewStart.cshtml將視圖與佈局綁定。
我正在使用ASP.NET MVC 4.我有一個稍重的「導航菜單」和「標題」,這對所有頁面都很常見。如何在不重新加載MVC 4中的佈局的情況下加載視圖?
我已經在佈局中創建了所有菜單和標題,但在每個導航中,瀏覽器重新加載菜單。有沒有任何可能的方法來防止重新加載佈局頁面?
我正在使用_ViewStart.cshtml將視圖與佈局綁定。
假設這將是你的菜單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的頁面內容!
如果導航菜單和標題對於所有頁面都是通用的,那麼您應該嘗試緩存導航菜單和標題。
如果你得到的觀點是由
起來,你可以使用一個佈局
@Html.RenderAction("header")
@Html.RenderAction("navigation")
@Render.Body()
其中「標題「和」導航「動作被大量緩存。
@Haacked提到這真棒此處的博客文章http://haacked.com/archive/2009/05/11/donut-hole-caching.aspx
這種方法清晰地分離出來你的頭和導航的關注。並且您可以專注於當前調用的操作顯示的實際內容。
希望這有助於
注:這個答案超級簡單,你將不得不如果您的導航基於用戶訪問的網頁的角色/權限,同時執行高速緩存考慮到動態參數之類的東西。
你能提供代碼示例或解釋你的代碼是如何工作的嗎?你能解釋一下問題是什麼嗎?重複使用導航菜單或標題非常常見,所以我不確定問題所在。 –
您可以使用部分視圖。 –
您可以使用部分視圖,同時單擊選項卡上的make和ajax調用以獲取您的局部視圖,然後替換您的內容。 –