简体   繁体   中英

ASP.NET MVC including ASP in Javascript

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?

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) {

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.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM