【问题标题】:MVC ajax is returning partial with layout instead of as a partialMVC ajax 返回部分布局而不是部分
【发布时间】:2018-11-04 08:15:15
【问题描述】:

我有一个带有 Home 控制器和 Weather 控制器的 MVC 网站。主控制器加载起始页(索引)并提供许多选项,这些选项都通过 ajax.load 加载内容:

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

LoadContent 执行以下操作:

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

天气/天气控制器/视图在后端调用天气 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>

这是一个 jquery ui 选项卡布局。工作正常。 _webcams.cshtml 部分包含一个引导轮播。

查看 ajax 响应后,HTML 部分调用正在返回完整布局(其中再次包括引导程序,从而破坏了轮播)。为了验证这一点,我尝试让 Weather/Weather 控制器/动作直接指向局部(如上所述),并且当我直接转到 Weather/Weather 时轮播工作(从而验证我的局部是否包括周围的 _layout .cshtml 代码。

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

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

【问题讨论】:

  • 您是否在控制器操作中尝试过return PartialView("~/Views/Weather/_webcams.cshtml", weatherObj);
  • 虽然只返回部分网络摄像头而不是最终我想要的响应,但我有并且部分呈现正确并且轮播工作。所以,是的!
  • 我做到了。我什至链接到它说那里的解决方案要么不起作用,因为我正在使用 $().load 或者我正在实施错误的解决方案。
  • 必须是return PartialView(weatherObj);
  • 这不起作用,除非我直接浏览到天气/天气。所以,如果我通过 ajax 加载它,它不会。

标签: c# jquery asp.net-mvc twitter-bootstrap-3 partial-views


【解决方案1】:

$().load()$.ajax 之间存在明显区别。

我不知道幕后有什么区别,但是将我的 $().load 更改为 $.ajax 电话解决了这个问题。

【讨论】:

    猜你喜欢
    • 2018-06-08
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    相关资源
    最近更新 更多