为什么在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中不起作用。。。。