动态更改 C# 端的脚本标记源

dynamically changing the script tag source on C# side

本文关键字:脚本 动态      更新时间:2023-09-26

如何从Page_Load动态更改<script> src属性?

当我说动态时,我的意思是它是同一个页面Default.aspx,但每次刷新都会引用不同的js源。 选择js文件背后的逻辑无关紧要,只是设置它的机制。

我试过了:

<script id="script1" runat="server" language="javascript" src="a.js" type="text/javascript"></script>

但是script1.cs方面不可用。 我知道我可以通过使用 <% %> 标签在.aspx端更改它,但我不想将我的逻辑像那样嵌入我的.aspx中。 在Page_Load .cs方面一定有办法做到这一点吗?

在你的页面加载处理程序上,你可以有这样的东西

string csurl = null;
string csname = "myscript";
if (condition)
{
    csurl = "~/a.js";
}
else    
{  
    csurl = "~/b.js";
}
if (!Page.ClientScript.IsClientScriptIncludeRegistered(cstype, csname))
{
    Page.ClientScript.RegisterClientScriptInclude(
        this.GetType(), 
        csname, 
        ResolveClientUrl(csurl));
}

 string csurl = null;
 if (condition)
 {
     csurl = "a.js";
 }
 else    
 {  
     csurl = "b.js";
 }
 Literal script = new Literal();
 script.Text = string.Format(
     @"<script src=""{0}"" type=""text/javascript""></script>",csurl);
 Page.Header.Controls.Add(script);

有几种方法可以做到这一点。一种方法是在代码隐藏中创建一个protectedpublic方法,该方法返回一个string,它会根据您的条件返回指向Javascript的正确URL。 然后,只需从标记中调用该方法,如下所示:

<script language="javascript" src="<%=GetJavaScriptUrl() %>" type="text/javascript"></script>

此示例假定您在代码隐藏 GetJavaScriptUrl 中调用该方法。

不幸的是,

我认为除了使用 <%= %> 之外,您别无选择。

除非有人知道不同(如果是这样,请发表评论,我会改变),否则在<script>块上使用 runat="server" 属性将意味着该块将在服务器端执行

更新

对不起,有点误解了你的问题。

我以为你是说你不想使用 <% %> 来设置<script>块的src属性。我现在明白你的意思是为每个文件创建单独的<script>块,通过逻辑<%If x Then%><%Else%><%End If%>块显示。

正如其他人已经说过的(我已经暗示过),您可以使用<%=GetSrcPath()%>设置src属性,并在代码隐藏中使用 GetSrcPath 方法中的逻辑。

只需使用脚本管理器:

例如,

string jsName = condition ? "a.js" : "b.js";
ScriptManager.GetCurrent(this).Scripts.Add(new ScriptReference(jsName));