我一直在试图弄清楚这是如何起作用的,或者不是这样。
我对我的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 }
);
}
答案 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按预期工作。
我不知道在原始项目中导致错误的原因,但它可能有助于解决您的问题。