如何在asp.Net中使用runat="server"属性的script标签

16
我不一定需要在服务器上运行它,但是我想使用~/js/somefile.js的语法。
以前,我只是使用绝对路径来设置所有东西,并将我的项目设置为根级别。因此,我会声明所有我的样式表、背景图像和JavaScript文件,比如/css/somefile.css 但是,对于这个项目,它不作为根目录运行。
我无法在脚本标记上放置runat="server"
但是,我可以把它放在链接标记上。
这必须是一个常见的问题,有一些简单的答案。
5个回答

20

我一直使用普通的script标记,并将src放在<% %>标记中,如这里所示

<script language="javascript" src='<%=ResolveUrl("~/App_Themes/MainTheme/jquery.js")%>' type='text/javascript'></script>

谢谢!是的,我现在记得以前看过这个了。 - Armstrongest
1
仅供参考,根据此帖子:https://dev59.com/K3RA5IYBdhLWcg3w8SeJ 更好的方式是从后面使用#(数据绑定表达式)和Bind。 - Armstrongest
@dl-_-lb:以前从没见过这样的用法,但它很有道理。谢谢! - David
5
对于一些人,如果遇到“控件集合无法修改”异常,一个额外的提示是将上述方法包装在<asp:PlaceHolder runat="server"></asp:PlaceHolder>标记中可能会有帮助。请注意,翻译保持原意,尽量通俗易懂,不添加解释或额外内容。 - Timothy Lee Russell

14
您可以使用ScriptManager完成此操作:
<asp:ScriptManager ID="ScriptManager1" runat="server">
        <Scripts>
            <asp:ScriptReference Path="~/js/somefile.js" />
        </Scripts>
</asp:ScriptManager>

我以前做过这个,是的...不过我想知道最好的方法是什么。这会增加其他开销吗? - Armstrongest
ScriptManager(或ToolkitManager)通常是ASP.NET Webforms中的理想选择。 - Nathan Taylor

5
您可以通过将

只有在 .master 文件中才能使用此方法;无法在常规的 aspx 网页中使用。 - Martin

3

你可以在路径字符串中使用函数,例如:

<script type="text/javascript"
        src="<%=Url.Content("~/Scripts/jquery-1.4.2.min.js") %>"></script>

然而,这是ASP.NET MVC本地路径的语法 - 我不能立即想起表单版本。


表单版本保持不变。MVC语法继承自Web表单。 - Joel Coehoorn
@Joel 我的意思是我正在使用的 UrlHelper 类仅适用于 MVC。正如其他人所说,表单版本是 System.Web.UI.Control 上的 ResolveUrl - Rup

1

摘自dailycoding.com

<script language="javascript" src="<%=ResolveUrl("~/[PATH]")%>" type="text/javascript"></script> 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接