在我的MVC应用程序中有AJAX调用我的控制器
Controller/FunctionName $.ajax({ type: "GET",contentType: "application/json; charset=utf-8",url: '/Controller/FunctionName',. . . )};
使用MVC 4并使用JQUERY Ajax函数,如上面的代码所示.当我从Visual studio运行时,它工作得很好.
我把它解散到服务器机器,正如预期的那样工作正常. AJAX调用中没有发现问题.
现在我试图在我的本地机器IIS中部署它,这与我的服务器版本(IIS 7.5)相同,但是在firebug中为所有的ajax调用获得404.
我验证了构建,甚至我指向我的网络文件夹,我仍然在寻找出了什么问题!
它在其他IIS中工作,所以它不会是一个URL解决问题是我的意图.我错过任何设置或任何及时的想法来解决这将是巨大的.
谢谢
解决方法
这是正常现象您已经将url硬编码到您的控制器操作:
url: '/Controller/FunctionName',
如果您将应用程序部署在IIS中的虚拟目录中,那么正确的URL应为:
url: '/YourAppName/Controller/FunctionName',
这就是为什么你绝对不要在ASP.NET MVC应用程序中硬编码url的原因,但是总是使用URL帮助来生成它:
url: '@Url.Action("FunctionName","Controller")',
如果这个AJAX调用是在一个单独的javascript文件中,你不能使用服务器端的帮助器,那么你可以从一些您要AJAXify的DOM元素中读取这个URL.
例如,假设你有一个锚点:
@Html.ActionLink("click me","FunctionName","Controller",null,new { id = "myLink" })
你AJAXify:
$('#myLink').click(function() { $.ajax({ url: this.href,contentType: 'application/json; charset=utf-8',type: 'GET',. . . )}; return false; });
注意我们如何从辅助程序生成的DOM元素中读取url.
结论和2条经验法则:
>永远不会在ASP.NET MVC应用程序中硬编码一个url>绝对总是在ASP.NET MVC应用程序中处理url时使用url helpers