Pablo
Pablo

Reputation: 2386

Asp.net MVC 3 FullCalendar Ajax calls fail

My simple test application works great off my local IIS server. When I publish it my shared hosting environment (discountasp.net), The AJAX call

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

        });

fails. Firebug shows the get arriving with the proper params and gives a '404 Not Found' error. And I can see that the controller method 'GetCurrentMonth' is never being called (with some log\audit code I put in).

As everything runs fine on my local IIS server and I can't connect with IIS7 Manager to the remote site to get a 'Failed Request Tracing'.. I'm kind of stuck.

If there is no magic web.config setting (oh please!) I would settle for a recommendation of a 'shared hosting environment' that supports ASP.NET MVC 3 where FullCalendar works and I'd move the application (my current hosting environment has been way less than helpful).

Upvotes: 0

Views: 1540

Answers (1)

Darin Dimitrov
Darin Dimitrov

Reputation: 1039428

Never hardcode urls as you did. Always use url helpers when generating urls in an ASP.NET MVC application:

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

Or if this is in a separate javascript file in which you don't have access to server side code one possibility is to use for example HTML5 data-* attributes, like this:

<div id="calendar" data-url="@Url.Action("GetCurrentMonth", "Home")"></div>

and then in your separate javascript file:

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

I bet 50 bucks the reason why your code doesn't work when you deployed it is because there is a virtual directory appended by IIS. So the correct url is not /Home/GetCurrentMonth but /YourApplicationName/Home/GetCurrentMonth. To avoid all those problems you should always use helpers when generating urls.

Upvotes: 4

Related Questions