views:

446

answers:

3

Hi,

Is it possible to put ASp.NET tags in my javascript which is in a seperate script file. For example, I have the following

 $.getJSON("/Postcode/GetAddressResults/" + $get("SearchPostcode").value, null, function(data) {

which I want to turn into but it does not like the ASP tags!

var action = "<%=Url.Content('~/Postcode/GetAddressResults/')%>" + $get("SearchPostcode").value
        $.getJSON(action, null, function(data) {

However this does not seem to work, what am I doing wrong?

A: 

If your JavaScript is in a separate script file, then it won't be processed by ASP.NET, so these tags won't be processed. You'll need them inline in an ASP.NET page for this to work.

David M
A: 

Hi unknown

No, you can`t. You can expose a path within your view to javascript, but not directly in your external javascript file.

@David M Inlining the whole thing is not really neccesary, you can inline the dynamic part and leave the other part hardcoded.

Regards, Peter

Peter Bucher
@Peter, If you want to comment on Davids answer then use the Add comment feature. Restrict the contents you your answer to an answer to the question.
AnthonyWJones
+1  A: 

Add to your master page(s) a meta tag to hold the value of the current applications path from the host (the bit the ~ represents).

In your Javascript create a function which will resolve a ~ prefixed path using the meta tag content.

Edit

Example as requested:-

Place this code in the head section your master pages:-

  <meta id="meta.AppDomainAppVirtualPath"
    name="AppDomainAppVirtualPath" value="<%=HttpRuntime.AppDomainAppVirtualPath%>" />

In your javascript include this function:-

function resolveUrl(url)
{
    if (url.charAt(0) == "~")
    {
        if (!resolveUrl.appPath)
        {
           var meta = document.getElementById('meta.AppDomainAppVirtualPath');
           resolveUrl.appPath = meta ? meta .getAttribute("content") : '/';
        }

        if (resolveUrl.appPath == '/')
            return url.slice(1, url.length;
        else
            return resolveUrl.appPath + url.slice(1, url.length);
    }
    else
    {
        return url;
    }
}

Now your line of code is:-

$.getJSON(resolveUrl("~/Postcode/GetAddressResults/") + $get("SearchPostcode").value, null, function(data) {
AnthonyWJones
Can you give me an example of this please?
andyJ