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

时间:2012-07-06 16:24:38

标签: javascript asp.net-4.0

如何从<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的{​​{1}}方面执行此操作吗?

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:0)

不幸的是,除了使用<%= %>之外,我认为你没有太多选择。

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

<强>更新

抱歉,有点误解你的问题。

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

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

答案 3 :(得分:0)

只需使用脚本管理器:

如,

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

ScriptManager.GetCurrent(this).Scripts.Add(new ScriptReference(jsName));