如何在 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:以前从未见过,但这是有道理的。谢谢! 对于某些人来说,如果他们得到“无法修改控件集合”异常,可能会有所帮助的附加提示是将上述方法包装在 :PlaceHolder> 标签。【参考方案2】:

您可以为此使用 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 属性设置为 truefalse 来设置它是否被执行。 示例如下:

    <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。

如何在 ASP.Net 网络表单中使用标签?

我如何使用 HTML 视频标签在 asp.net 应用程序中播放 VLC 实时流媒体视频

asp.net _Layout.cshtml 仅在模型类型为 ______ 时加载脚本

ASP.NET如何调用标签打印机

ASP.NET SQL 等于输入文本框