为什么在访问Ajax中的控制器方法时出现404错误?

时间:2012-05-15 15:14:31

标签: ajax asp.net-mvc jquery asp.net-mvc-controller

我有一个控制器ValidationController,它有一个名为EmailExist

的方法

我有一个ajax电话

$.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错误,我不知道为什么?关于如何调试这个的任何建议或建议?

1 个答案:

答案 0 :(得分:4)

您已对网址进行了硬编码:

url: "/Validation/EmailExist"

那是非常糟糕。在处理网址时,您应该始终使用网址助手:

url: "@Url.Action("EmailExist", "Validation")"

这很糟糕的原因是因为您已经对网址进行了硬编码,因此您不再依赖路由配置。如果您在Global.asax中更改路线,您的代码将会中断。在IIS中部署应用程序时,您的代码也会中断,因为现在有一个您应该考虑的虚拟目录名称。因此,正确的网址不再是/Validation/EmailExist,而是/MyAppName/Validation/EmailExist。帮助者会考虑所有这些事情,这就是你应该总是使用它们的原因。

当然,如果这是在一个单独的javascript文件中,你无法访问服务器端代码,你可以在DOM中使用HTML5 data- *属性来放置正确的url或直接使用一些现有的元素,如表格动作或锚点href。