代码之家  ›  专栏  ›  技术社区  ›  Marc Gravell

使用ASP.NET MVC在母版页中使用脚本

  •  67
  • Marc Gravell  · 技术社区  · 16 年前

    我是ASP.NET MVC的新手,在脚本方面有点问题。。。特别是,我希望在大多数页面中使用jQuery,因此将其放在母版页中是有意义的。但是,如果我(从我的 ~/Views/Shared/Site.Master ):

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

    ~/Scripts/... 不起作用。从 /Scripts/... 只有当项目位于站点根目录(我不想假设)时,它才会工作。

    我宁愿不涉及脚本管理器,因为这似乎会破坏ASP.NET MVC模型的简单性。。。还是我太担心了?

    下面是我可以让它工作的方法,它也适用于非平凡的虚拟现实-但它似乎过于复杂:

    <script src="<%=Url.Content("~/Scripts/jquery-1.2.6.js")%>" type="text/javascript"></script>
    
    11 回复  |  直到 15 年前
        1
  •  45
  •   Eduardo Campañó    16 年前

    public static string ReferenceScript(string scriptFile)
    {
        var filePath = VirtualPathUtility.ToAbsolute("~/Scripts/" + scriptFile);
        return "<script type=\"text/javascript\" src=\"" + filePath + "\"></script>";
    }
    

    因此,在母版页中,您可以使用:

    <%= AppHelper.ReferenceScript("jquery-1.2.6.js") %>
    
        2
  •  35
  •   superlogical    16 年前

    我认为最简单的方法是使用下面的方法,并且它在视图中工作来实现。

    <script type="text/javascript" src="<%=ResolveUrl("~/Scripts/myscript.js") %>">
    
    </script>
    
        3
  •  20
  •   Marc Gravell    16 年前

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

    与:

    public static string Script(this HtmlHelper html, string path)
    {
        var filePath = VirtualPathUtility.ToAbsolute(path);
        return "<script type=\"text/javascript\" src=\"" + filePath + "\"></script>";
    }
    
        4
  •  10
  •   OJ.    16 年前
        5
  •  4
  •   Eduardo Campañó    16 年前

    我做了一些OJ提到的事情,我用这个方法创建了一个GoogleHelper类

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

        6
  •  1
  •   Leandro López    16 年前

    在工作中,我们从ASP代码中执行以下操作:

    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
    

    我不知道用ASP.NETMVC是否可以做到这一点。

        7
  •  1
  •   Peder Skou    15 年前

        8
  •  1
  •   lamchakchan    13 年前

    您应该看看如何使用像squish it这样的实用程序。它可以为您聚合和混淆所有css和js文件。或者,如果您只是通过使用ForceDebug()将其保持在debug more中,则可以使用它来生成脚本标记

    http://www.codethinked.com/squishit-the-friendly-aspnet-javascript-and-css-squisher

        9
  •  1
  •   Raisul Asad    12 年前

    例如:

    <script src="/Script/jquery-1.4.1.js"></script>
    

    当“jquery-1.4.1.js”文件位于root的脚本目录中时。

        10
  •  0
  •   Russell    15 年前

    我们的应用程序是使用虚拟目录部署的,我们在这里提到的其他答案中遇到了一些问题(没有正确解析路径)。一种有效的方法(不是唯一的方法)是:

    <script src="<%=Request.ApplicationPath%>/Web/AppName/JavaScript/jquery-1.4.1.js"></script>
    
        11
  •  0
  •   Alex Pryiomka    13 年前

    <script src="@Url.Content("~/Scripts/jquery.min.js")" type="text/javascript"></script>
    
    推荐文章