69 votes

L’utilisation de scripts dans une page maître avec ASP.NET MVC

Je suis assez nouveau à l'ASP.NET MVC, et je vais avoir un peu de mal avec les scripts... en particulier, je veux utiliser jQuery dans la plupart des pages, il est donc logique de le mettre dans la page maître. Cependant, si je fais (à partir de mon ~/Views/Shared/Site.Master):

<script src="../../Scripts/jquery-1.2.6.js" type="text/javascript"></script>

Alors que c'est littéralement ce qui se passe vers le client - qui bien sûr ne fonctionne que si notre itinéraire actuel arrive à avoir le bon nombre de niveaux. En commençant par ~/Scripts/... ne fonctionne pas. En commençant par /Scripts/... ne fonctionne que si le projet était à la racine du site (dont je ne veux pas assumer).

J'ai une approche de travail (je vais poster ci-dessous) - mais: suis-je raté quelque chose?

Je préfère ne pas avoir à impliquer un script manager, qui semble à la défaite de la simplicité de l'ASP.NET modèle MVC... ou suis-je trop se préoccuper?

Voici la façon dont je peux obtenir ce travail, qui fonctionne aussi pour les non-trivial virtuals - mais il semble compliqué:

<script src="<%=Url.Content("~/Scripts/jquery-1.2.6.js")%>" type="text/javascript"></script>

45voto

Eduardo Campañó Points 4801

J’ai une classe de AppHelper avec quelques méthodes permettant d’ajouter des références de script :

donc dans votre page maître, vous pouvez utiliser :

36voto

superlogical Points 5129

Je pense que le moyen le plus simple est d'utiliser ce qui suit, et cela fonctionne dans les vues.

 <script type="text/javascript" src="<%=ResolveUrl("~/Scripts/myscript.js") %>">

</script>
 

20voto

Marc Gravell Points 482669

Basé sur les autres réponses, peut-être une méthode d'extension sur HTML (ce qui est très courant pour MVC), similaire à la réponse d'Eduardo:

  <%=Html.Script("~/Scripts/jquery-1.2.6.js")%>
 

Avec:

 public static string Script(this HtmlHelper html, string path)
{
    var filePath = VirtualPathUtility.ToAbsolute(path);
    return "<script type=\"text/javascript\" src=\"" + filePath + "\"></script>";
}
 

10voto

OJ. Points 16939

Pourquoi ne pas simplement pointer votre page maître vers l'hébergement de fichiers js de Google ? Ensuite, même en ce qui concerne le déploiement (en supposant que votre site fait face à Net), vous pouvez abuser éventuellement de fichiers jQuery pré-cachés?

4voto

Eduardo Campañó Points 4801

J'ai fait une partie de ce que mentionne OJ, j'ai créé une classe GoogleHelper avec cette méthode

 public static string ReferenceGoogleAPI()
{
    var appSettings = new AppSettingsReader();
    string apiKey = appSettings.GetValue("GoogleApiKey", typeof(string)).ToString();
    return ReferenceGoogleAPI(apiKey);
}

public static string ReferenceGoogleAPI(string key)
{
    return "<script type=\"text/javascript\" src=\"http://www.google.com/jsapi?key=" + key + "\"></script>";
}

public static string ReferenceGoogleLibrary(string name, string version)
{
    return "<script type=\"text/javascript\">google.load(\"" + name + "\", \"" + version + "\");</script>";
}
 

J'ajoute maintenant des méthodes supplémentaires pour obtenir des données ClientLocation;)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X