【问题标题】:Asp.net MVC Core - unable to load partial view using AjaxAsp.net MVC Core - 无法使用 Ajax 加载部分视图
【发布时间】:2017-06-16 08:07:32
【问题描述】:

按照这个article,我正在尝试通过Ajax 加载Partial View。但它没有加载partial view

注意事项:

  1. 我正在使用带有最新更新的 VS2015,默认安装/配置 Jquery,Visual Studio 的 MVC Core Web 应用项目模板附带。
  2. Google Chrome 的开发者工具没有显示错误。而且,浏览器的view source依然显示<div id="UpdateTabData"></div> tag empty
  3. 我通过将alert('Test') 放置在 Ajax 调用中的 click 事件中并在控制器操作方法中使用 breakpoint 进行了测试,Ajax 确实在调用 TestAction 方法并且该方法确实返回 return PartialView("PartialView", myViemodel); 而没有操作方法中的任何错误。
  4. 但最后的 Ajax 从它的错误函数返回我的自定义错误消息

控制器

[HttpGet]
public IActionResult TestAction(string calledFrom)
{
  ... some code here with a view model myViemodel

  return PartialView("myPartialViewName", myViemodel);
}

查看:

@model myProj.Models.myTestViewModel
...some html here...
<div id="UpdateTabData"></div>
... more html here
...

Ajax 代码在视图末尾

$(document).ready(function () {

    $('#myTabstripID li').click(function () {
        var li_id = $(this).attr("id");

        $.ajax({
            url: '@Url.Action("TestAction", "myControllerName")',
            data: { calledFrom: li_id},
            contentType: 'application/json',
            dataType: 'html'
            type: 'GET',
            cache: false,
            success: function (data) {
                $('#UpdateTabData').html(data);
            },
            error: function (data) {
                alert('Error occurred');
            }
        });
    });

});

【问题讨论】:

  • 打开您的浏览器开发工具 -> 网络选项卡并查看您的 ajax 调用的响应。 200可以吗?如果没有,请检查响应并查看您得到了什么。可能是你的服务器代码崩溃了
  • @Shyju 是的,dev tools -&gt;network-&gt;Headers 标签显示status code: 200 OK
  • 开发工具中的预览窗格显示什么?
  • @Shyju 通过使用您的评论,我能够通过在控制器的 return PartialView("myPartialViewName", myViemodel); 语句中添加 .cshtml 扩展名来解决问题。对不起,我没有意识到status code: 200 OK 实际上是在我在响应部分中找到未找到视图文件的消息之后(我的错)。我只是随便添加了.cshtml 扩展名,并没有检查它是否确实解决了这个问题。为了其他用户的利益,如果您将评论转换为answer,我会将其标记为答案。

标签: jquery ajax asp.net-core asp.net-ajax asp.net-mvc-partialview


【解决方案1】:
  1. 按 f12 并检查应返回部分视图的操作的 URL。
  2. 复制该 URL 并将其粘贴到浏览器地址栏,然后按 Enter。
  3. 您将看到错误(如果有错误)或您的部分视图。
  4. 如果第 3 步没有错误,请尝试输入 alert($('#UpdateTabData').length);在控制台中(如果您确实有一个具有此类 id 的元素,则应为 1);

这是一个非常简单的任务(我的意思是得到一些返回局部视图的操作结果),所以它应该可以工作。因此,您可能只是在某个地方输入了错误的 id 或类似这样的小东西。

【讨论】:

    【解决方案2】:

    您可以删除这部分代码。

    contentType: 'application/json',
    

    根据控制器中的 ActionResult,您将返回部分视图。所以你的 ajax 调用需要一个视图而不是 json。这将解决您的问题。

    【讨论】:

    • 这是错误的,内容类型定义了您发送的数据类型,而不是接收的数据类型。 DataType 定义您接收的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 2011-03-31
    相关资源
    最近更新 更多