我在VS2010,ASP.NET MVC 2项目中工作。该项目已经完成,仍有待在IIS上公布,但问题出现了。 调用控制器方法的AJAX请求在IIS上不起作用,但在VS中工作。我不知道是否应该包含某些内容,特别是对于AJAX的IIS支持? 我需要帮助以及如何转发请求,url被解释为带参数的MVC请求? 我使用IIS 5.
答案 0 :(得分:1)
您已经在javascript中对网址进行了硬编码,不是吗:
$.post('/home/index', function(result) {
});
而不是使用网址助手:
$.post('<%= Url.Action("index", "home") %>', function(result) {
});
在IIS中部署应用程序时代码不起作用的原因是因为您现在有一个虚拟目录,如下所示:http://example.com/myapplication/home/index
。如果您对URL进行硬编码而不是使用URL帮助程序来生成它,那么最终会向http://example.com/home/index
发送一个AJAX请求,这当然不起作用,因为您缺少应用程序名称。
在本地工作时,如果您使用的是Visual Studio的内置Web服务器,则没有虚拟目录,并且网址如下所示:http://locahost:1234/home/index
。
我个人建议你只使用HTML帮助器来生成<form>
和<a>
等DOM元素,然后不引人注意地对它们进行AJAX化。
例如,您可以使用以下格式:
<% using (Html.BeginForm("SomeAction", "SomeController")) { %>
... some input fields
<% } %>
你可以这样AJAXify:
$(function() {
$('form').submit(function() {
$.post(this.action, $(this).serialize(), function(result) {
// TODO: process the results
});
return false;
});
});
看看我们的javascript文件中的任何网址都不再硬编码了?现在无论你在哪里托管申请,一切都会有效。