0

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

我通过 switch case 来做到这一点,每个 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”,但找不到合适的帖子。

4

2 回答 2

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;  
} 
于 2012-08-17T22:08:25.757 回答
0

调用Response.Write()将破坏输出标记,即它会在Render()调用之前写入内容,从而将脚本放在文档标记之外。Literal在页面中添加 aText并将 equal 的属性设置Literal为脚本。

更好的是,只需使用RegisterStartupScript(). 它适用于这样的场景,让您可以更好地控制脚本的执行时间。如果您ScriptManager在页面上使用 a ,则有类似的方法

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

C#

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

用户控制

<asp:Placeholder runat="server" id="plhScript1" visible="false">
    <script>
    // script goes here


    </script>
</asp:Placeholder>

<asp:Placeholder runat="server" id="plhScript2" visible="false">
    <script>
    // script goes here


    </script>
</asp:Placeholder>
于 2012-08-17T22:12:50.387 回答