我跟着样本。我添加了_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?
答案 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
立即执行我所能说的。