ASP.Net主页面和文件路径问题

The*_*ude 77 javascript asp.net jquery runatserver

我正在尝试在我的母版页中添加一个jQuery的脚本引用,以便它适用于任何页面.它目前看起来像这样

<script type="text/javascript" src="jquery.js"></script>
Run Code Online (Sandbox Code Playgroud)

问题是路径始终相对于正在执行的aspx页面,所以这只有在"jquery.js"文件位于同一文件夹中时才有效.为了使它工作,我必须将行更改为:

<script type="text/javascript" src="../../jquery.js"></script>
Run Code Online (Sandbox Code Playgroud)

这显然不太理想,因为它只适用于从根文件夹两层深的页面.如果我尝试以下操作,IIS会抛出有关意外字符的错误.

<script runat="server" type="text/javascript" src="~/jquery.js"></script>
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

编辑:我忘了也提到脚本必须在head标签中

当我将其添加到我的母版页时,当前的最佳答案会抛出" ASP.NET Ajax客户端框架无法加载. "错误.它是从javascript而不是.Net编译器抛出的.如果我将ScriptManager移动到应该是的head部分,我会收到有关需要在表单标记内的ScriptManager的编译错误.

第三个答案抛出了编译器中的" 路径中的非法字符. "异常

编辑2:当我将该行添加到我的head标签时,我从IIS中收到此错误.

无法修改Controls集合,因为控件包含代码块(即<%...%>)

已解决:我从下面的答案中获取了编辑后的响应,并将其放在asp:ContentPlaceHolder元素中

Cᴏʀ*_*ᴏʀʏ 110

你可以使用ScriptManager:

<asp:ScriptManager ID="ScriptManager1" runat="server">
    <Scripts>
        <asp:ScriptReference Path="~/jquery.js" />
    </Scripts>
</asp:ScriptManager>
Run Code Online (Sandbox Code Playgroud)

编辑:如果你在你的部分绝对需要这个<head>,你可以这样做:

<head>
    <script type="text/javascript" 
        src="<%= Page.ResolveClientUrl("~/jquery.js") %>"></script>
</head>
Run Code Online (Sandbox Code Playgroud)

编辑2:根据评论,如果你正在观察

无法修改Controls集合,因为控件包含代码块(即<%...%>)

您可能需要更改以上内容以使用数据绑定语法:

<head>
    <script type="text/javascript" 
        src="<%# Page.ResolveClientUrl("~/jquery.js") %>"></script>
</head>
Run Code Online (Sandbox Code Playgroud)

  • 这几乎在我的所有页面上都适用于我,但对于2个页面会因某个异常而爆炸:"控件集合无法修改,因为控件包含代码".解决方案是将标题中的脚本include从response.write代码块更改为数据绑定评估程序(即 - 将<%=更改为<%#).我猜想这是MS在阻止http头攻击方面的某种尝试.有关这个简单修复的更好解释,请访问:http://leedumond.com/blog/the-controls-collection-cannot-be-modified-because-the-control-contains-code-blocks/ (3认同)

Sid*_*aig 25

尝试<%#而不是<%=在head部分下的Master页面中

<script type="text/javascript" 
        src="<%# ResolveUrl("~/YourScriptFolder/YourJQueryOrJavascript.js") %>">
</script>
Run Code Online (Sandbox Code Playgroud)

然后在Page_LoadEvent 下的Master Bepage下面

Page.Header.DataBind();
Run Code Online (Sandbox Code Playgroud)

现在你可以使用jQuery和JavaScript以及CSS,只需要改变ResolveUrl你想要处理CSS,JavaScript,jQuery的文件的路径.


Kel*_*tex 10

如果您不打算使用asp:ScriptManager或绝对路径,那么您可以这样做:

<script runat="server" type="text/javascript" 
  src='<%= Page.ResolveUrl("~/jquery.js") %>'></script>
Run Code Online (Sandbox Code Playgroud)