如何在asp.net母版页中插入javascript

时间:2009-08-07 17:28:28

标签: asp.net javascript

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

然而,问题是如果嵌套页面位于不同的路径中,这种方法不起作用,因为尽管嵌套页面位于不同的位置,路径保持不变 - 任何有关如何使路径自动运行的解决方案就像它对css文件一样吗?

谢谢!

7 个答案:

答案 0 :(得分:7)

~/是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

答案 1 :(得分:5)

Cory Larson recommends

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

答案 2 :(得分:0)

尝试

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

我一直在使用网址重写,并且“〜”偶尔会对网址中的特殊字符进行窒息,即使它们已被编码。

答案 3 :(得分:0)

如果脚本标签位于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>

答案 4 :(得分:0)

链接样式表可以放在标题中(使用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>

答案 5 :(得分:0)

回答@ [包括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" />

对于JavaScripts:

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

答案 6 :(得分:-1)

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