2013-08-22 2 views
2

Я работаю с ASP.NET MVC 4. У меня немного более тяжелое «меню навигации» и «заголовок», которое является общим для всех страниц.Как загрузить представление без перезагрузки макета в MVC 4?

Я создал все элементы меню и заголовка в макете, но в каждой навигации браузер перезагружает меню. Есть ли способ предотвратить перезагрузку страницы макета?

Я использую _ViewStart.cshtml, чтобы связать представления с макетом.

+0

Можете ли вы привести примеры кода или объяснить, как работает ваш код? Можете ли вы объяснить, в чем проблема? Повторное использование меню навигации или заголовка довольно распространено, поэтому я не уверен, в чем проблема. –

+0

Вы можете использовать частичные виды. –

+1

Вы можете использовать частичные виды и при нажатии на вкладку make и ajax call получить частичный вид, а затем заменить свое содержимое. –

ответ

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. You cannot use @section in partial views

Теперь все, что вам нужно загрузить это частичное содержание с помощью Ajax и поместить его в основном заполнителе DIV для содержимого страницы с помощью 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); 
}); 
}); 

Надеется, что это поможет!

1

Вы должны попробовать кешировать меню навигации и заголовок, если они являются общими для всех страниц.

Если полученный вид состоит из

  1. заголовок
  2. навигации
  3. содержимого меню

и вы можете использовать макет

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

где " заголовок "и" навигация " сильно кэшируются.

@Haacked упомянул этот удивительный пост в блоге здесь http://haacked.com/archive/2009/05/11/donut-hole-caching.aspx

Этот подход четко отделяет вашу заботу заголовка и навигации. И вы можете сосредоточиться на фактическом содержимом, которое будет отображаться вызываемым в настоящее время действием.

Надеется, что это помогает

Примечанию: Этот ответ очень упрощенным, и вы должны учитывать динамические параметры и прочее во время выполнения кэширования, если ваша навигация на основании ролей/разрешений пользователей, получающий доступ к страницам.

Смежные вопросы