我的简单测试应用程序在本地IIS服务器上运行良好。 当我发布它的共享托管环境(discountasp.net),AJAX调用
$("#calendar").fullCalendar({
eventSources: [{
url: '/Home/GetCurrentMonth',
type: 'Get',
error: function () {
alert('there was an error while fetching events!');
}
}]
});
失败。 Firebug用适当的参数显示到达,并给出'404 Not Found'错误。我可以看到控制器方法'GetCurrentMonth'永远不会被调用(我输入了一些日志\审计代码)。
由于我的本地IIS服务器上的一切正常,我无法通过IIS7管理器连接到远程站点以获得“失败的请求跟踪”。我有点卡住了。
如果没有神奇的web.config设置(哦,请!)我会满足于推荐支持ASP.NET MVC 3的'共享托管环境',其中FullCalendar可以工作,我会移动应用程序(我目前托管环境一直没有帮助。)
答案 0 :(得分:4)
永远不要像你那样对网址进行硬编码。在ASP.NET MVC应用程序中生成URL时始终使用URL帮助程序:
$('#calendar').fullCalendar({
eventSources: [{
url: '@Url.Action("GetCurrentMonth", "Home")',
type: 'GET',
error: function () {
alert('there was an error while fetching events!');
}
}]
});
或者,如果这是在一个单独的javascript文件中,您无法访问服务器端代码,则可能使用HTML5 data- *属性,例如:
<div id="calendar" data-url="@Url.Action("GetCurrentMonth", "Home")"></div>
然后在你单独的javascript文件中:
$('#calendar').fullCalendar({
eventSources: [{
url: $('#calendar').data('url'),
type: 'GET',
error: function () {
alert('there was an error while fetching events!');
}
}]
});
我下注50美元你部署它时代码不起作用的原因是因为IIS附加了一个虚拟目录。因此,正确的网址不是/Home/GetCurrentMonth
,而是/YourApplicationName/Home/GetCurrentMonth
。为避免所有这些问题,您应该在生成网址时始终使用帮助程序。