代码之家  ›  专栏  ›  技术社区  ›  yogihosting

为什么在ASP.NET核心中实现PJAX时,request.headers[“x-pjax”]总是空的?

  •  0
  • yogihosting  · 技术社区  · 6 年前

    我正在尝试在ASP.NET核心中实现PJAX,但是 Request.Headers["X-PJAX"] 总是空的。PJAX文件是 https://github.com/defunkt/jquery-pjax

    my\u layout.cs HTML代码:

    <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();
        }
    

    问题是我明白了 请求标题[“X-PJAX”] 总是“?”为什么????

    请帮忙。 谢谢你

    1 回复  |  直到 6 年前
        1
  •  1
  •   itminus    6 年前

    这是因为您要为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')