2

In jQuery code I'm using ResolveUrl("~/DynamicMenu.ashx").

But it just returns the exact string:

"ResolveUrl("~/DynamicMenu.ashx")"

Here is a bit of code:

pageIndex = pageIndex + 1;
var CountryCode = getCookie("SetCountry");
var urlToHandler = '<%= ResolveUrl("~/DynamicMenu.ashx") %>'; 
urlToHandler = urlToHandler + CountryCode + "&PageIndex=" + pageIndex;
alert(urlToHandler);

What is wrong in my code for ResolveUrl()?

3
  • 1
    i don't see a javascript call to ResolveUrl. From javascript perspective '<%= ResolveUrl("~/DynamicMenu.ashx") %>' is a string, it is your ASP application that is supposed to run that code Commented Jun 29, 2012 at 14:20
  • 1
    yeah this has nothing to do with javascript. it's asp.net, and i know i've had problems with server tags in javascript code Commented Jun 29, 2012 at 14:21
  • <% var siteroot = Url.Content("~/") %> Commented Jun 30, 2012 at 17:57

2 Answers 2

2

The problem, as poncha pointed out, is that as far as ASP.NET is concerned, the content delivered in your .js file is a string. It does not apply any sort of rendering before IIS delivers it. It gets the same treatment any other content file would, like a .jpg or .png.

In order to call server side methods (like ResolveUrl), you need to use the <% ... %> syntax within any page that is parsed by ASP.NET (like an .aspx or .master file).


By the way, these little code blocks go by a lot of different names:


In particular, we want a Displaying Expression with the syntax <%= ... %>, where:

the value that is entered after the equals sign is written into the current page

Knowing that, we can build our own own URL by using ResolveClientUrl() which:

returns a URL string suitable for use by the client to access resources on the Web server

To this, we'll pass in the Web Application Root Operator or ~ character, where ASP.NET:

resolves the ~ operator to the root of the current application:

By combining these, we can save the result of the displaying expression into a JavaScript variable by placing the following code on your Master Page (adapted from Joel Varty's blog):

<script type="text/javascript">
    var baseUrl = '<%= Page.ResolveClientUrl("~/") %>';
</script>

Since JavaScript variables are inherently global, any other script can now access the baseUrl variable, so we can utilize it from the .js file with the following script:

function ResolveUrl(url) {
    return url.replace("~/", baseUrl);
}

Now you can call ResolveUrl("~/DynamicMenu.ashx") directly from your javascript file and it will create the appropriate URL by stripping out "~/" and replacing it with the baseUrl created earlier by the server side script.


Further Reading:

Sign up to request clarification or add additional context in comments.

Comments

1

Try this solution - ResolveUrl in Javascript

5 Comments

@user384080 -- care to elaborate? I actually think it's a perfect solution.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.