2014-03-23 7 views
0

Как загрузить первую страницу приложения MVC 4 через AJAX?Как загрузить первую страницу приложения MVC 4 через AJAX?

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

После добавления управления историей через history.js, я изменил свои частичные представления, чтобы иметь кнопку возврата, которая работает так, как ожидалось.

Моя проблема в том, что после перехода на пару страниц и нажатия кнопки «Назад», когда я добираюсь до первого элемента истории окон, то есть: страницы index.chtml, эта страница загружается с появлением навигационной панели дважды. После нажатия F5 страница загружается правильно.

Что я делаю неправильно и как лучше всего это исправить?

Заранее спасибо за вашу помощь

Кстати, это JavaScript я загружаю на Layout View:

$(function() { 

var contentShell = $('#bodyContent'); 

var History = window.History, State = History.getState(); 

$(".ajaxLink").on('click', function (e) {   
    e.preventDefault(); 
    var url = $(this).data('href'); 
    var title = $(this).data('title'); 
    History.pushState(null, title, url); 
}); 

History.Adapter.bind(window, 'statechange', function() { 
    State = History.getState();  
    navigateToURL(State.url); 
}); 

function navigateToURL(url) {   
    $.ajax({ 
     type: "GET", 
     url: url, 
     dataType: "html", 
     success: function (data, status, xhr) { 
      contentShell.html(data); 
     }, 
     error: function (xhr, status, error) { 
      alert("Error loading Page."); 
     } 
    }); 
} 

$('.history-back').on('click', function (e) {   
     e.preventDefault(); 
     History.back(); 
     return false; 
}) 
}); 

ответ

1

Это выглядит для меня, как известная проблема, ошибка, связанная с события кликов, которые дважды запускаются в некоторых браузерах. Это приводит к тому, что History.pushState(...) в вашем коде выполняется дважды.

Вы можете попробовать добавить sth. как e.stopPropagation() к вашему коду после. Подробнее об этой проблеме вы можете найти здесь: https://stackoverflow.com/a/21511818/2270888

+0

Спасибо Попробую, что – EdsonF

1

Попробуйте что-нибудь подобное в вашем «первый пункт» контроллер действия:

public ActionResult Index() 
{ 
    if (Request.IsAjaxRequest()) 
    { 
     return PartialView(); 
    } 

    return View(); 
}