2011-08-28 73 views
0

我的简单测试应用程序在我的本地IIS服务器上运行良好。 当我发表我的共享主机环境(discountasp.net),Ajax调用Asp.net MVC 3 FullCalendar 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的作品,我会移动应用程序目前的托管环境一直不太有用)。

回答

3

从不像您那样硬编码网址。在ASP.NET MVC应用程序生成的URL时,必须使用网址助手:

$('#calendar').fullCalendar({ 
    eventSources: [{ 
     url: '@Url.Action("GetCurrentMonth", "Home")', 
     type: 'GET', 
     error: function() { 
      alert('there was an error while fetching events!'); 
     } 
    }] 
}); 

或者,如果这是在您没有访问服务器端代码一个可能性是使用例如一个单独的JavaScript文件HTML5数据 - *属性,像这样:

<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附加的虚拟目录。所以正确的url不是/Home/GetCurrentMonth而是/YourApplicationName/Home/GetCurrentMonth。为了避免所有这些问题,您应该在生成网址时始终使用助手。

+0

“有一个由IIS附加的虚拟目录”,你确定吗?搜索“网站:discountasp.net”使用子域名返回了很多匹配(例如stocks.paul.discountasp.net) – bzlm

+0

@bzlm,不,我不确定,我不知道这个托管网站,但是考虑到症状我敢打赌50美元,这是他的问题。转向生产时的404错误=> 99.999999%的硬编码网址导致的情况。 –

+0

只有当这是唯一的硬编码操作链接,对吗? – bzlm