使用Ajax MVC 5返回部分视图

时间:2016-03-30 04:55:13

标签: ajax asp.net-mvc

我一直在试图弄清楚这是如何起作用的,或者不是这样。

我对我的HomeController进行了Ajax调用:

function addPerson() {

    $.ajax({
        dataType: "html",
        url: '@Url.Action("AddPerson")',
        success: function (data) {
            $('#Detail').hide();
            $('#Detail').html(data);
        },
        error: function () {
            $('#Detail').html("<h3>Couldn't do that</h3>");
        }
    }
    );

在我的HomeController中使用此ActionResult:

    public ActionResult AddPerson()
    {
        return PartialView("_AddPerson");
    }

_AddPerson.cshtml位于我的Views / Shared文件夹中,因为任何部分视图都是。

我想要做的就是将局部视图中的html附加到主视图中的div。 Intelisense会选择AddPerson操作,但是当我去运行它时,我在调用该函数时会在Chrome中出现此错误:

“无法加载资源:服务器响应状态为404(未找到)http://localhost:45003/Home/AddPerson

我实际上已经让这个调用工作了,唯一的区别是我正在将数据传递给控制器​​,而不仅仅是按原样返回局部视图。我做错了什么,或者我试图实现的功能甚至不可能?

编辑:我的RouteConfig如果重要:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }

3 个答案:

答案 0 :(得分:1)

它应该像魅力一样工作。检查@Url.Action("AddPerson")生成的网址。您确定与定义AddPerson的控制器位于同一路径中吗?您可能必须将控制器参数添加到Url.Action或甚至区域名称。

url: '@Url.Action("AddPerson", "controllerName"'

url: '@Url.Action("AddPerson", "controllerName", new { area = "areaName" })'

答案 1 :(得分:0)

使用AJAX调用,您可以通过以下方式使用它:

$('#Detail').load(
        '<%= Url.Action("AddPerson", "Home") %>'
 );

答案 2 :(得分:0)

万一有人发现这个并遇到类似的问题,我通过创建一个新项目并将完全相同的代码放入其中来解决它。 IT按预期工作。

我不知道在原始项目中导致错误的原因,但它可能有助于解决您的问题。