1

我跟踪了样本。我添加了一个_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 发现新页面内容被直接加载到我单击的锚点中,而不是 id 为 #shell 的元素中。怎么回事?

4

2 回答 2

1

您使用的是旧语法,新的 pjax 使用以下内容:

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

此外,我不熟悉您使用的语言,但为了使 pjax 发生,您的 ViewStart 中必须有一个带有 id shell 的 HTML 元素。

由于我不确定该语言的语法,请尝试类似的方法进行测试:

 @{
  if (Request.Headers["X-PJAX"] != null) {
    echo "<ul id="shell"> pjaaxxx </ul>"; // Would work in php, update syntax 
  } else {
    Layout = "~/Views/Shared/_Layout.cshtml";
  }
}
于 2013-10-21T17:08:19.440 回答
0

我在 PJax 文档中没有看到该语法有效。

你确定你不是那个意思$(document).pjax('a',{});

$.pjax从我能告诉的情况立即执行。

于 2013-10-11T00:44:25.970 回答