InspiredBy
InspiredBy

Reputation: 4320

Ajax requests ignore virtual application sub-folder name in URL for ASP.NET MVC application

My application is located on the server under a separate virtual directory. To access my ASP.NET MVC application users have to go to:

http://server-dev/superApp

I have a problem with Ajax/Json server requests ignoring the "superApp" directory part. Whenever an Ajax request is made Fiddler shows 404 because instead of http://server-dev/superApp/User/GetUsersJson for example, http://server-dev/User/GetUsersJson is called (note the missing superApp name).

Example of an Ajax request:

function GetUsers(id) {
    $.ajax({
        url: "/User/GetUsersJson/",
        data:{ id: id},
        datatype: 'json',
        type:'post',
        success: function (result) {
            ////Do stuff with returned result
        }        
    });      
}

Registered route:

r.Match("User/GetUsersJson", "User", "GetUsersJson");

Where should I look and what can I change to make sure that my application virtual folder is ALWAYS included in all URL requests ?

p.s. Please note that all Javascript/Ajax logic is kept in separate .js files so no RAZOR syntax is available.

Upvotes: 4

Views: 2887

Answers (3)

Shyju
Shyju

Reputation: 218862

Did you try using the HTML helper method ?

url: "@Url.ACtion("GetUsersJson","User)"

EDIT : As per the comment

You may get the Path name using the HTML Helper method and Keep that in a Global variable and access that in the external javascript file

In the view

<script type="text/javascript>
  var globalGetJSONPath='@Url.ACtion("GetUsersJson","User)';
</script>

And now you can use it in the external file like this

 $.ajax({
        url: globalGetJSONPath,
        data:{ id: id},
        //remaining items....

  });

Upvotes: 4

Sergei Rogovtcev
Sergei Rogovtcev

Reputation: 5832

No way to do it without some server-side code generation. Easiest thing would be defining global variable (sorry) holding you application root and initializing it somewhere in master page.

Javascript generation of route urls always was one of the messiest parts of asp.net mvc.

Upvotes: 1

Aleksei Anufriev
Aleksei Anufriev

Reputation: 3236

I solved this stuff by passing variable to js that contains hostname+vdir. Because of heavy js url generation.
In other cases Shyju's answer is best way to solve this.

Upvotes: 1

Related Questions