.net - tutorial - webform mvc
Usar scripts en una página maestra con ASP.NET MVC (11)
¿Por qué no solo apunta su página maestra al alojamiento de archivos js de Google ? Entonces, incluso en lo que se refiere a la implementación (suponiendo que su sitio esté orientado a la red), ¿puede abusar de los archivos jquery posiblemente almacenados previamente?
Soy bastante nuevo en ASP.NET MVC, y estoy teniendo un pequeño problema con los scripts ... en particular, quiero usar jQuery en la mayoría de las páginas, por lo que tiene sentido ponerlo en la página maestra. Sin embargo, si lo hago (desde mi ~/Views/Shared/Site.Master
):
<script src="../../Scripts/jquery-1.2.6.js" type="text/javascript"></script>
Entonces, eso es literalmente lo que pasa al cliente, que por supuesto solo funciona si nuestra ruta actual tiene el número correcto de niveles. Comenzar con ~/Scripts/...
no funciona. Comenzar con /Scripts/...
solo funcionaría si el proyecto estuviera en la raíz del sitio (que no quiero suponer).
Tengo un enfoque de trabajo (lo publicaré a continuación), pero ¿me estoy perdiendo algo?
Preferiría no tener que involucrar a un administrador de scripts, ya que eso parece frustrar la simplicidad del modelo ASP.NET MVC ... ¿o me estoy preocupando demasiado?
Esta es la forma en que puedo hacer que funcione, que también funciona para los virtuales no triviales, pero parece demasiado complicado:
<script src="<%=Url.Content("~/Scripts/jquery-1.2.6.js")%>" type="text/javascript"></script>
Creo que la forma más simple es usar lo siguiente, y funciona en vistas para.
<script type="text/javascript" src="<%=ResolveUrl("~/Scripts/myscript.js") %>">
</script>
Deberías echarle un vistazo usando una herramienta como squish it. Puede agregar y ofuscar todos sus archivos css y js por usted. O puede usarlo para generar etiquetas de script si solo lo mantiene en depuración más usando ForceDebug ()
http://www.codethinked.com/squishit-the-friendly-aspnet-javascript-and-css-squisher
En el trabajo, estamos haciendo algo como esto del código ASP detrás:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Const jQuery As String = "jQuery"
With Me.Page.ClientScript
If Not .IsClientScriptIncludeRegistered(jQuery) Then
.RegisterClientScriptInclude(jQuery, VirtualPathUtility.ToAbsolute("~/Includes/jQuery-1.2.6.js"))
End If
End With
End Sub
No sé si es posible hacer eso con ASP.NET MVC.
Hice algo de lo que menciona OJ, creé una clase GoogleHelper con este método
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>";
}
Ahora estoy agregando métodos adicionales para obtener algunos datos de ClientLocation;)
Nuestras aplicaciones se implementan usando directorios virtuales, y hemos tenido algunos problemas con otras respuestas mencionadas aquí (no resolviendo la ruta correctamente). Una forma que funcionó bien (no es la única forma de recordarlo), fue usar esto:
<script src="<%=Request.ApplicationPath%>/Web/AppName/JavaScript/jquery-1.4.1.js"></script>
Puede probar el método de extensión Url.Content con la sintaxis Razor
<script src="@Url.Content("~/Scripts/jquery.min.js")" type="text/javascript"></script>
ResolveUrl es la solución más elegante de la OMI. Aunque es una verdadera lástima, las URL de CSS se resuelven con runat = server y no con el script.
Según las otras respuestas, quizás un método de extensión en Html (que es muy común para MVC), similar a la respuesta de Eduardo:
<%=Html.Script("~/Scripts/jquery-1.2.6.js")%>
Con:
public static string Script(this HtmlHelper html, string path)
{
var filePath = VirtualPathUtility.ToAbsolute(path);
return "<script type=/"text/javascript/" src=/"" + filePath + "/"></script>";
}
Solo uso una barra (/). Por ejemplo:
<script src="/Script/jquery-1.4.1.js"></script>
cuando el archivo "jquery-1.4.1.js" está en el directorio de Script de la raíz. Y funciona perfectamente.
Tengo una clase AppHelper con algunos métodos para agregar referencias de scripts:
public static string ReferenceScript(string scriptFile)
{
var filePath = VirtualPathUtility.ToAbsolute("~/Scripts/" + scriptFile);
return "<script type=/"text/javascript/" src=/"" + filePath + "/"></script>";
}
entonces en tu página maestra puedes usar:
<%= AppHelper.ReferenceScript("jquery-1.2.6.js") %>