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

MVC Ajax返回的是部分布局而不是部分布局

  •  0
  • user4593252  · 技术社区  · 7 年前

    我有一个MVC网站,有一个家庭控制器和一个天气控制器。主控制器加载起始页(索引),并显示了许多选项,其中所有内容都通过ajax.load进行加载,从而:

    <li onclick="LoadContent('/Weather/Weather');">...</li>

    LoadContent执行以下操作:

    function LoadContent(url){
        try {
            $("#divMainContent").load(url, function () {
                //do visual graphic stuff here
                ...
            });
        } ...
    }
    

    weather/weather controller/view在后端调用weather api并像这样传递模型:

    public ActionResult Weather()
        {
            //api stuff
            ...
            return View(weatherObj);
            //return View("_webcams", weatherObj);
        }
    

    当我单击列表项加载我想要的部分内容时,它将加载weather/weather.cshtml视图。它包括以下内容:

    <div id="tabs">
        <ul>
            <li>...</li>
            <li><a href="#tabs-6">Webcams</a></li>
        </ul>
        ...
        <div id="tabs-6">
            @Html.Partial("~/Views/Weather/_webcams.cshtml")
        </div>
    </div>
    

    这是一个jQueryUI选项卡布局。工作正常。cshtml部分包含引导传送带。

    在查看了Ajax响应之后,HTML部分调用将返回完整的布局(其中再次包括引导,从而中断了传送带)。为了验证这一点,我尝试让天气/天气控制器/操作点直接指向部分(如上所述),当我直接转到天气/天气时,转盘工作(从而验证我的部分是否包括周围的_layout.cshtml代码)。

    我试过了 the solutions here 但要么我做错了(告诉分部不使用布局),要么$().Load()函数的行为与普通的Ajax调用不同。

    有人能解释一下发生了什么事吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   user4593252    7 年前

    两者之间有明显的区别 $().load() $.ajax .

    我不知道引擎盖下有什么区别,但改变了我的 $().load 阿贾克斯 呼叫解决了问题。