PJax не работает с проектом MVC

Я следил за образцами. Я добавил _PjaxLayout:

<title>@ViewBag.Title</title>
@RenderBody()

Изменил мой _Layout:

    <div id="shell">
        @RenderBody()
    </div>
    <script type="text/javascript">
    $(function () {
        // pjax
        $.pjax.defaults.timeout = 5000;
        $('a').pjax('#shell');
    })
    </script>

Обновленный ViewStart:

  @{
  if (Request.Headers["X-PJAX"] != null) {
    Layout = "~/Views/Shared/_PjaxLayout.cshtml";
  } else {
    Layout = "~/Views/Shared/_Layout.cshtml";
  }
}

Однако каждый раз, когда я нажимаю на тег «a», код pjax не вызывается. Как будто селектор не работает, когда я настраиваю pjax. Что я делаю неправильно?

ОБНОВИТЬ:

Если я сделаю это:

        $('document').ready(function () {
        $('a').pjax({
            container: '#shell',
            timeout: 5000
        });
    });

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

ОБНОВИТЬ:

Проверка DOM после того, как произошло это сумасшествие, показывает, что новое содержимое страницы загружается непосредственно в якорь, на который я нажимаю, а не в элемент с идентификатором #shell. ВТФ?


person RobVious    schedule 10.10.2013    source источник


Ответы (2)


Вы используете устаревший синтаксис, новый pjax использует следующее:

$(document).pjax('a', '#shell', { fragment: '#shell' });

Кроме того, я не знаком с языком, который вы используете, но для того, чтобы pjax работал, в вашем ViewStart должен быть элемент HTML с оболочкой id.

Поскольку я не уверен в синтаксисе этого языка, попробуйте что-то подобное для тестирования:

 @{
  if (Request.Headers["X-PJAX"] != null) {
    echo "<ul id="shell"> pjaaxxx </ul>"; // Would work in php, update syntax 
  } else {
    Layout = "~/Views/Shared/_Layout.cshtml";
  }
}
person Fonzy    schedule 21.10.2013

Я не вижу этот синтаксис действительным в документации PJax.

Вы уверены, что не имели в виду $(document).pjax('a',{});?

$.pjax сразу же выполняется, насколько я могу судить.

person Guvante    schedule 11.10.2013
comment
Я пробовал каждый синтаксис, который мог найти, это единственный, который заставляет меня нажимать код pjax. С вашим предложением, как указан контейнер RenderBody? - person RobVious; 11.10.2013
comment
@RobVious: внутри {} вы указываете контейнер и время ожидания. - person Guvante; 15.10.2013