如何在 asp.Net 的脚本标签上使用 runat="server"
Posted
技术标签:
【中文标题】如何在 asp.Net 的脚本标签上使用 runat="server"【英文标题】:How can I use runat="server" on a script tag in asp.Net 【发布时间】:2010-08-18 18:52:15 【问题描述】:我不一定需要在服务器上运行它,但是,我想使用~/js/somefile.js
语法。
以前,我只是将所有内容都设置为绝对路径,并将我的项目设置为根级别。所以,我只需声明我所有的样式表、背景图像和 javascript 文件,例如 /css/somefile.css
但是,对于这个项目,它不以 root 身份运行。
我不能将runat="server"
放在脚本标签上。
不过,我可以把它放在链接标签上。
这一定是一个常见的问题,只需几个简单的答案。
【问题讨论】:
【参考方案1】:我一直在做的是使用普通的script
标签并将src
放入<% %>
标签中,如图here:
<script language="javascript" src='<%=ResolveUrl("~/App_Themes/MainTheme/jquery.js")%>' type='text/javascript'></script>
【讨论】:
谢谢!是的,现在我记得以前看过这个。 仅供参考,根据这篇文章:***.com/questions/778952/… 最好使用 # (DataBinding Expression) 并从后面绑定。 @dl-_-lb:以前从未见过,但这是有道理的。谢谢! 对于某些人来说,如果他们得到“无法修改控件集合”异常,可能会有所帮助的附加提示是将上述方法包装在您可以为此使用 ScriptManager:
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Scripts>
<asp:ScriptReference Path="~/js/somefile.js" />
</Scripts>
</asp:ScriptManager>
【讨论】:
我过去做过这个,是的......我想知道最好的方法是什么。这会增加任何其他开销吗? ScriptManager(或 ToolkitManager)通常是 ASP.NET Webforms 中的理想选择。【参考方案3】:您可以通过使用 asp:ContentPlaceHolder 包装脚本标签来完全获得所需的内容 并且您可以从后面的代码中访问它,例如通过将 visible 属性设置为 true 或 false 来设置它是否被执行。 示例如下:
<asp:ContentPlaceHolder runat="server" ID="PrintPreviewBlock" Visible="false">
<script id="PrintPageCall" type="text/javascript" >
$(function()
window.print();
);
</script>
</asp:ContentPlaceHolder>
以及来自后面的代码:
PrintPreviewBlock.Visible = true;
【讨论】:
这仅在您将其放入.master
文件时才有效;您不能在常规的 aspx 网页中执行此操作。【参考方案4】:
不过,您可以在路径字符串中使用函数,例如
<script type="text/javascript"
src="<%=Url.Content("~/Scripts/jquery-1.4.2.min.js") %>"></script>
但是,这是本地路径的 ASP.NET MVC 语法 - 我不记得表单版本了。
【讨论】:
表单版本是一样的。 MVC 语法继承自 Web 表单。 @Joel 我的意思是我使用的UrlHelper
类仅适用于MVC。正如其他人击败我一样,表单版本是ResolveUrl
on System.Web.UI.Control
。【参考方案5】:
取自dailycoding.com:
<script language="javascript" src="<%=ResolveUrl("~/[PATH]")%>" type="text/javascript"></script>
【讨论】:
以上是关于如何在 asp.Net 的脚本标签上使用 runat="server"的主要内容,如果未能解决你的问题,请参考以下文章
指向脚本标签的 src 属性以从 asp.net mvc 2 中的操作方法下载 js。
我如何使用 HTML 视频标签在 asp.net 应用程序中播放 VLC 实时流媒体视频