2009-03-30 6 views
3

Est-il possible de mettre des balises ASp.NET dans mon javascript qui se trouve dans un fichier de script séparé. Par exemple, j'ai le suivantASP.NET MVC incluant ASP en Javascript

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

que je veux transformer en mais il n'aime pas les balises ASP!

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

Toutefois, cela ne semble pas fonctionner, ce que je fais mal?

+0

Quelle est l'erreur que vous obtenez? Il est possible d'intégrer des tags ASP dans js, car asp est traité en premier. – Brian

+0

Toute réponse définitive quant à savoir si cela est possible? Je vois la solution de contournement ci-dessous, mais j'aimerais savoir si vous pouvez intégrer les balises asp.net à l'intérieur des blocs de script ou non. – Pete

+0

Nevermind - Je n'ai pas lu que cela faisait référence à un fichier js séparé. Les tags dynamiques fonctionnent à l'intérieur des blocs de script, bien que cela casse la mise en évidence du code et IntelliSense dans Visual Studio. – Pete

Répondre

1

Ajouter à votre page principale (s) d'une balise meta pour maintenir la valeur du chemin des applications actuelles de l'hôte (le bit le ~ représente). Dans votre Javascript, créez une fonction qui va résoudre un ~ chemin préfixé en utilisant le contenu de la balise meta.

Modifier

Exemple comme demandé: -

Placez ce code dans la section de la tête de vos pages maître: -

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

Dans votre javascript inclure cette fonction: -

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; 
    } 
} 

Maintenant votre li le code est: -

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

Pouvez-vous me donner un exemple s'il vous plaît? – andyJ

0

Si votre JavaScript se trouve dans un fichier script séparé, il ne sera pas traité par ASP.NET, donc ces tags ne seront pas traités. Vous en aurez besoin dans une page ASP.NET pour que cela fonctionne.

0

Non, vous ne pouvez pas. Vous pouvez exposer un chemin dans votre vue à javascript, mais pas directement dans votre fichier javascript externe.

@David M Inline le tout n'est pas vraiment nécessaire, vous pouvez aligner la partie dynamique et laisser l'autre partie codée en dur.

Cordialement, Peter

+0

@Peter, Si vous voulez commenter la réponse de David, utilisez la fonction Ajouter un commentaire. Restreindre le contenu de votre réponse à une réponse à la question. – AnthonyWJones