【问题标题】:How to insert javascript in asp.net master pages [duplicate]如何在asp.net母版页中插入javascript [重复]
【发布时间】:2010-11-17 18:37:08
【问题描述】:

我们在母版页中包含 javascript 时遇到了一些问题。 “~/”根快捷方式似乎不起作用,因此我们必须手动输入要使用它的 javascript 的路径,例如:“../../tooltip.js”

但是,问题在于,如果嵌套页面位于不同的路径中,则此方法不起作用,因为尽管嵌套页面位于不同的位置,但路径保持不变 - 关于如何使路径自动工作的任何解决方案就像它对 css 文件所做的那样?

谢谢!

【问题讨论】:

    标签: asp.net javascript


    【解决方案1】:

    ~/ 是 ASP.NET 中的一个特殊实体,它代表“应用程序根”。仅当您通过 ASP.NET 服务器控件(例如 <asp:Image runat="server" ImageUrl="~/path..." />)传递该 URL 时,才会发生转换。尝试在作为文本直接传递给客户端的内容中使用它,例如 ` 将在浏览器中完全呈现。

    有几个解决方案:

    1. 把你的脚本放在一个相对于域根的可预测的地方,比如domain.com/scripts/script.js,你可以把它称为/scripts/script.js。前面的/ 告诉客户端(浏览器)它是来自域根的绝对路径。

    2. 使用Page.ResolveClientUrl渲染正确的路径(<%=Page.ResolveClientUrl("~/script./js")%>

    3. 创建您自己的服务器控件来处理~/ 分辨率。

    4. 将脚本嵌入为assembly resource

    【讨论】:

    • 感谢您提供详细的解决方案 - 如果可行,绝对路径方法似乎很简单。
    【解决方案2】:

    科里·拉尔森recommends:

    <script type="text/javascript" src="<%= Page.ResolveClientUrl("~/tooltip.js") %>"></script>
    

    【讨论】:

    • 这是正确的方法,错过了波浪号。这行得通,我会删除我的。
    • 我喜欢稍微不同的语法:&lt;script type="text/javascript" src="&lt;%= Page.ResolveClientUrl("~/") %&gt;tooltip.js"&gt;&lt;/script&gt;
    【解决方案3】:

    试试

    <script type="text/javascript" src=<%=Request.ApplicationPath+"/Scripts/Script_Name"%>></script>
    

    我一直在使用 url 重写和“~”偶尔会阻塞 url 中的特殊字符,即使它们已被编码。

    【讨论】:

      【解决方案4】:

      如果脚本标签在 HEAD 元素中,只需使用相对于母版页的路径,asp.net 将自动为您修复引用。只需确保 HEAD 元素具有 runat=”server” 属性。

      这也适用于 CSS 文件。这是我能够让它们在 VS.NET 设计器中解决的唯一方法。

      这是我项目中的一个示例:

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
      <head id="Head1" runat="server">
          <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
          <link rel="stylesheet" type="text/css" href="../styles/reset.css" />
          <link rel="stylesheet" type="text/css" href="../styles/960.css" />
          <link rel="stylesheet" type="text/css" href="../styles/default.css" />
          <link rel="stylesheet" type="text/css" href="../styles/buttons.css" />
          <script type="text/javascript" src="../jQuery/jquery-1.3.2.js"></script>
      </head>
      

      【讨论】:

        【解决方案5】:

        链接的样式表可以放在标题中(使用 runat="server")并使用 ~ 来解析根。但是,无法以这种方式引用 Javascript 文件。添加脚本的另一种方法是在正文中使用脚本管理器。

        <html>
        <head runat="server">
            <title>title</title>
            <link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />
        </head>
        <body>
        <form runat="server">
        <asp:ScriptManager ID="ScriptManager" runat="server" EnablePageMethods="true">
            <Scripts>
                <asp:ScriptReference Path="~/Scripts/jquery-1.4.2.js" />
                <asp:ScriptReference Path="~/Scripts/jquery-ui-1.8.custom.min.js" />
            </Scripts>
        </asp:ScriptManager>
        </body>
        </html>
        

        【讨论】:

          【解决方案6】:

          正如@[包括 Javascript 和 CSS][1] 的回答 http://www.codeproject.com/Articles/404942/Include-JavaScript-and-CSS-on-your-MasterPage

          对于 CSS 文件:

          <link href="<%# ResolveUrl("~/") %>css/custom-theme/jquery-ui-1.8.21.custom.css" rel="stylesheet" type="text/css" />
          

          对于 JavaScript:

           <script src="<%# ResolveUrl("~/") %>Scripts/jquery-1.7.2.min.js" type="text/javascript"></script>
          

          【讨论】:

            【解决方案7】:

            你能解释一下“~/”不起作用的意思吗?它应该正是您正在寻找的。您可以检查您的 head 标记是否具有 runat="server" 属性,因为这可能会阻止“~/”工作。

            【讨论】:

            • 不知道投反对票的原因是什么,因为我说的是真的... -- 嗯...
            • ~/ 无法正确解析 javascript 包含标签。 (但我没有投反对票)
            • 呸!我站纠正! -- 我知道它适用于 head 标签内的标签(比如样式表) -- 没有意识到它不适用于脚本!
            猜你喜欢
            • 2014-06-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-12-15
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多