为什么在Ajax中访问控制器方法时会出现404错误?
我有一个控制器为什么在Ajax中访问控制器方法时会出现404错误?,ajax,asp.net-mvc,jquery,asp.net-mvc-controller,Ajax,Asp.net Mvc,Jquery,Asp.net Mvc Controller,我有一个控制器ValidationController,它有一个名为EmailExist 我有个电话 $.ajax({ type: "POST", url: "/Validation/EmailExist", data: { 'Email': $('#Email').val() }, success: function (result) { if (result == true) { alert("true");
ValidationController
,它有一个名为EmailExist
我有个电话
$.ajax({
type: "POST",
url: "/Validation/EmailExist",
data: { 'Email': $('#Email').val() },
success: function (result) {
if (result == true) {
alert("true");
} else {
alert("false");
}
},
error: function (error) {
alert(error.responseText);
}
我得到了404错误,我不知道为什么?有任何关于如何调试的建议吗?您已经硬编码了一个url:
url: "/Validation/EmailExist"
那太糟糕了。处理url时,应始终使用url帮助程序:
url: "@Url.Action("EmailExist", "Validation")"
这不好的原因是因为您已经硬编码了url,因此不再依赖于路由配置。如果在Global.asax中更改路由,代码将中断。在IIS中部署应用程序时,代码也会中断,因为现在有一个虚拟目录名需要考虑。因此,正确的url不再是/Validation/EmailExist
,而是/MyAppName/Validation/EmailExist
。所有这些事情都被助手们考虑到了,这就是为什么你应该一直使用它们的原因
当然,如果这是在一个单独的javascript文件中,您没有访问服务器端代码的权限,您可以在DOM中使用HTML5 data-*属性来放置正确的url,或者直接使用一些现有元素,例如表单操作或锚href。在浏览器中转到
/Validation/EmailExist
时会发生什么?我得到一个Http错误404与IIST这是一个很好的提示,但这不是我的问题您是否更改了路由设置?你确定有一个名为ValidationController
的公共类派生自Controller
并拥有一个名为EmailExist
的公共操作吗?我在同一个解决方案中有另一个MVC项目,它与我当前的项目冲突。所以在Global.asax中,我将名称空间添加到我的routes.MapRoute中,因为Home Controller位于IIS上的两个网站中,我猜,它不知道使用哪一个。从那时起,我不能调用我的控制器方法存储JS Url的另一个选项是执行类似App.Urls.EmailExistUrl=@Url.Action…顺便说一句,Darin,razor在jquery中不起作用。。。。