为什么 Request.Headers["X-PJAX"] 在 asp.net 内核中实现 pjax 时总是空的?

Why Request.Headers["X-PJAX"] is always empty when implementing pjax in asp.net core?

我正在尝试在 asp.net 核心中实现 pjax,但 Request.Headers["X-PJAX"] 始终为空。 PJAX 文档是 - https://github.com/defunkt/jquery-pjax

我的_Layout.cshtml代码:

<head>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="~/js/jquery.pjax.js"></script>
<script type="text/javascript">
    $(function () {
        // pjax
        $('ul a').pjax('#main')
    })
</script>
</head>

<body>
<ul>
  <li><a href="/" class="current">MAIN PAGE</a></li>
  <li><a href="/Home/About">About</a></li>
</ul>

<div id="main">@RenderBody()</div>
</body>

我的_ViewStart.cshtml页面代码:

@{
    if (ViewBag.PJAX==true)
    {
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    else
    {
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
}

我的控制器的索引和关于操作:

public IActionResult Index()
    {
        if (string.IsNullOrEmpty(Request.Headers["X-PJAX"]))
            ViewBag.PJAX = false;
        else
            ViewBag.PJAX = true;
        return View();
    }

public IActionResult About()
    {
        if (string.IsNullOrEmpty(Request.Headers["X-PJAX"]))
            ViewBag.PJAX = false;
        else
            ViewBag.PJAX = true;
        return View();
    }

问题是我 Request.Headers["X-PJAX"] 总是“”?为什么???

请帮忙。 谢谢

那是因为您为 Pjax 选择了一个空容器。让我们检查一下您的 HTML 结构:

<body>
    <ul>
        <li><a href="/" class="current">MAIN PAGE</a></li>
        <li><a href="/Home/About">About</a></li>
    </ul>
    <div id="main">@RenderBody()</div>
</body>

并且您正在如下初始化 pjax :

$('ul a').pjax('#main')

请注意 #main 不是 ul 的子代。

要修复您的代码,只需尝试:

$(document).pjax('#main')

或者,如果您想自定义选择器,请尝试以下示例:

$(document).pjax('a', '#main')
$(document).pjax('ul a', '#main')