MVC "~" path in javascript

asp.net, javascript, path, relative-path

Solution

If you're trying to get link to an action, you can define JavaScript variales in your view that will be populated with `Url.Action`:

<script type="text/javascript">
    var userApiPath = '@(Url.Action("userApi", "api"))';
</script>

And later use this variable in your JS file:

$.getJSON(userApiPath,          
    function (data) {
});

If you want a general path to your app, you can do something like that:

<script type="text/javascript">
    var path = '@(string.Format("{0}://{1}{2}",
                Request.Url.Scheme,
                Request.Url.Host,
                (Request.Url.IsDefaultPort) ? "" : string.Format(":{0}",
                Request.Url.Port)))';
</script>

And later use this variable somewhere in your JS files. Of course you don't have to use `string.Format` to do this, that's just an example.

EDIT:

You may also consider using RazorJS.

Problem

I use JavaScript code to call an MVC web API. It works fine when the current path is: `http://localhost/myApp/Administrator` but it fails when current path is: `http://localhost/myApp/Administrator/` I get the error `The resource cannot be found`. Below is the code: ``` $.getJSON("api/UserApi", function (data) { ... }); ``` I don't want to use an absolute URL in the code, e.g.: ``` $.getJSON("http://localhost/myApp/api/UserApi", function (data) { ... }); ``` The absolute URL does work fine, but lacks flexibility. Is there a way to do the same thing as below? ``` $.getJSON("~/api/UserApi", function (data) { ... }); ``` ASP.NET supports the replacement of the "~" character with the current application's root path, e.g.: `http://localhost/myApp` However, the "~" character is not supported in JavaScript files. How do I accomplish the same thing? The JavaScript is in a standalone file that cannot use ASP.NET statements like `Url.Content`. Is there a better way to do it? I've found the following method. Are there any better solutions?: 1) Write the code below in a .cshtml file ``` <script type="text/javascript"> var currentDomain = '@Url.Content("~")'; </script> ``` 2) Read the `currentDomain` variable from the .js file: ``` $.getJSON(currentDomain + "/api/UserApi", function (data) { ... }); ```

Original source