在Switch block / C#中显示JS脚本块(例如广告词脚本)

时间:2012-08-08 23:10:31

标签: c# controls

我尝试编写Control(.ascx)来管理我内部页面的横幅。

我是通过切换案例来实现的,每个ID都匹配正确的横幅。问题 - 如何将Adwords JS脚本放在switch break;

应该是这样的:

switch(_bannerId) 
{ 
     case "banner1": 
     {
           <script type= >
              Google adsense code
           </script>
     }
     case "banner2": 
     {
           <script type= >
              Google adsense code
           </script>
     }

     break;  
} 

有可能吗?怎么做?

修改

它不适用于Response.Write()

我尝试搜索“如何从代码后面调用Javascript”但我找不到合适的帖子。

2 个答案:

答案 0 :(得分:0)

你不能简单地混合使用c#代码和html,你需要将html代码视为字符串并将它们添加到页面输出中。

将此.ascx文件添加:

<Asp:Literal runat="server" ID="AdwordsScript"></Asp:Literal>

然后到你的ascx.cs文件:

switch(_bannerId) 
{ 
     case "banner1": 
     {
           AdwordsScript.Text= @"<script type=""text/javascript"">
              //Google adsense code 1
           </script>";
     }
     break;  
     case "banner2": 
     {
           AdwordsScript.Text= @"<script type=""text/javascript"">
              //Google adsense code 2
           </script>";
     }
     break;  
} 

答案 1 :(得分:0)

调用Response.Write()将破坏输出标记,即它将在调用Render()之前写入内容,从而将脚本放在文档的标记之外。向页面添加Literal,并将Text的{​​{1}}属性设置为等于脚本。

Better still, just use RegisterStartupScript()。它适用于这样的场景,可让您更好地控制脚本执行的时间。如果您在页面上使用Literal,则会有similar method

或者,为了避免代码中的大型脚本字符串,您可以在标记中的ScriptManager中声明所有脚本,并根据您的switch语句显示/隐藏它们。

C#

Placeholders

用户控制

switch(_bannerId){
  case "banner1":
      this.plhScript1.Visible = true;
      break;
  case "banner2":
      this.plhScript2.Visible = true;
      break;
  default:
      throw new InvalidOperationException( "Unknown banner type" );
}