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 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 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 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 ):
The following script should place before the external JavaScript reference
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: