PJax不使用MVC项目

时间:2013-10-10 20:58:20

标签: pjax

我跟着样本。我添加了_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代码被点击并且Request标头被更新,并且新内容加载到页面上,但样式和布局变得非常混乱和重复......

更新:

在发生这种疯狂之后检查DOM会发现新页面内容直接加载到我单击的锚点中,而不是加载到id为#shell的元素中。 WTF?

2 个答案:

答案 0 :(得分: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";
  }
}

答案 1 :(得分:0)

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

你确定你没有意思$(document).pjax('a',{});吗?

$.pjax立即执行我所能说的。