Asp.net mvc 在IIS 7.5中返回404(本地)的AJAX调用,但在其他IIS中也适用
我在MVC应用程序中对控制器进行AJAX调用Asp.net mvc 在IIS 7.5中返回404(本地)的AJAX调用,但在其他IIS中也适用,asp.net-mvc,jquery,deployment,iis-7.5,Asp.net Mvc,Jquery,Deployment,Iis 7.5,我在MVC应用程序中对控制器进行AJAX调用 Controller/FunctionName $.ajax({ type: "GET", contentType: "application/json; charset=utf-8", url: '/Controller/FunctionName', . . . )}; 我使用MVC4并使用上述代码中所示的jQueryAjax函数
Controller/FunctionName
$.ajax({
type: "GET",
contentType: "application/json; charset=utf-8",
url: '/Controller/FunctionName',
.
.
.
)};
我使用MVC4并使用上述代码中所示的jQueryAjax
函数。当我从VisualStudio运行时,它工作得非常好
我将其解析到服务器机器上,正如预期的那样,它工作正常。在AJAX调用中未发现任何问题
现在我正试图在我的本地机器IIS中部署这个,它与我的服务器版本(IIS 7.5)
相同,但是我在firebug中得到了所有ajax调用的404
我验证了构建,甚至我指向了我的web文件夹,仍然在寻找出错的地方
它在其他IIS中工作,所以它不会是一个URL解决问题是我的访客。我是否错过了任何设置或任何及时的想法来修复这将是伟大的
谢谢,这很正常。您已将url硬编码到控制器操作:
url: '/Controller/FunctionName',
如果在IIS的虚拟目录中部署应用程序,则正确的url应为:
url: '/YourAppName/Controller/FunctionName',
这就是为什么绝对不要在ASP.NET MVC应用程序中硬编码url,而是始终使用url帮助程序生成url的原因:
url: '@Url.Action("FunctionName", "Controller")',
如果这个AJAX调用位于一个单独的javascript文件中,您不能使用服务器端助手,那么您可以从您正在Ajaxing的某个DOM元素中读取这个url
例如,假设您有一个锚:
@Html.ActionLink("click me", "FunctionName", "Controller", null, new { id = "myLink" })
你可以说:
$('#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帮助程序
@Html.Hidden("URLEndpointName", Url.Action("FunctionName", "Controller"))
并阅读js中的隐藏字段:
url: $("#URLEndpointName").val(),
您可以在url中使用双点:
$.ajax({
url: '../ControllerName/ActionName',
.......
});
完全同意你的观点,达林。“它如何在一个IIS中工作,而在另一个IIS中不工作?”达林问。如果它可以在其他IIS中工作,为什么不能在其他IIS中工作?这取决于应用程序的配置方式-它是直接部署在网站中还是作为虚拟目录。@Darin最后一个问题,我是用Javascript编写的。我有你的Actionlink示例。Bt您可以在单击按钮时更新相同的场景。如何获取这些链接?您可以将链接作为HTML5 data-*属性嵌入到按钮中:
,然后在单独的javascript文件中订阅。单击此按钮的事件并使用varurl=$(this.data('url')检索url代码>。这为我解决了这个问题。在我的例子中,Url.Action(“FunctionName”、“Controller”)没有返回正确的Url。