2012-07-06 41 views
2

如何动态更改Page_Load中的<script>src属性?动态更改C#端脚本标记源

当我说动态时,我的意思是它是相同的页面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一侧必须有办法做到这一点?

回答

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); 
+0

我必须评论,即使由于这个作品,OP(你不Cleaudio)没有明显原因的事情很复杂。拥有'<%=Variable%>'要清洁得多。哦,而不是'如果'你可以使用'开关':) – Dementic 2012-07-06 16:44:38

0

不幸的是,我认为除了使用<%= %>之外,别无选择。

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

UPDATE

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

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

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

+0

基本上,我想避免使用任何'<% %>'东西是可能的。我在回顾克劳迪奥雷迪的回答,它似乎更接近我寻找的解决方案类型。 – user17753 2012-07-06 16:38:16

+0

够用@ user1169578 - 这是一个有趣的解决方案。 (我相信你有你的理由避免'<% %>',但它是有原因的,它的工作)祝你好运:-) – freefaller 2012-07-06 16:40:25

2

有几种方法可以做到这一点。一种方法是在代码隐藏中制作protectedpublic方法,该方法返回string,该方法根据您的条件向您的Javascript返回正确的URL。然后,就调用该方法从您的标记,像这样:

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

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

0

只需使用脚本管理器:

例如,

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

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