3

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

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

我试过:

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

但在侧面script1不可用。.cs我知道我可以.aspx通过使用<% %>标签来改变它,但我不想让我的逻辑像这样嵌入到我的.aspx. 必须有办法做到这.cs一点Page_Load

4

4 回答 4

6

在您的页面加载处理程序上,您可能会有这样的东西

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);
于 2012-07-06T16:30:45.483 回答
4

有几种方法可以做到这一点。一种方法是在您的代码隐藏中创建一个protectedor方法,该方法返回 a ,该方法根据您的标准将正确的 URL 返回到您的 Javascript。然后,只需从您的标记中调用该方法,如下所示:publicstring

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

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

于 2012-07-06T16:28:46.590 回答
0

不幸的是,我认为除了使用<%= %>.

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

更新

对不起,稍微误解了你的问题。

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

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

于 2012-07-06T16:28:34.960 回答
0

只需使用脚本管理器:

例如,

string jsName = condition ? "a.js" : "b.js";

ScriptManager.GetCurrent(this).Scripts.Add(new ScriptReference(jsName));
于 2012-07-06T16:45:51.450 回答