2012-07-25 29 views
38
protected void timer1_Tick(object sender, EventArgs e) 
    { 
     foreach (RepeaterItem item in rpChat.Items) 
     { 
      TextBox txt = item.FindControl("txtChatMessage") as TextBox; 
      if (txt != null) 
      { 
       message[i] = txt.Text; 
       i--; 
      } 
     } 
     lblStatusChat.Text = ""; 
     RepeaterBind(); 
     string javaScript = "<script language=JavaScript>\n" + "alert('Button1_Click client-side');\n" + "</script>"; 

     Page.ClientScript.RegisterStartupScript(this.GetType(), "myKey", javaScript); 
    } 

timer_click触发器和更新面板。和警报消息犯规上timer_tick事件显示RegisterStartupScript不适用于ScriptManager,UpdatePanel。这是为什么?

回答

93

当您使用更新面板,那么你不能调用JavaScript像上面。你必须使用

ScriptManager.RegisterStartupScript 

所以更改

Page.ClientScript.RegisterStartupScript(this.GetType(), "myKey", javaScript); 

ScriptManager.RegisterStartupScript(updatePanelId,updatePanelId.GetType() 
                 , "alert", javaScript, true); 
+0

我与ASP.NET 2.0卡住,你不能给面板ID,所以这将无法正常工作。有什么建议么? – 2015-08-25 15:43:36

+1

传递更新面板ID和类型是错误的,而是将'this.Page'和'this.GetType()'传递给它。 – modiX 2017-06-08 19:17:13

9

因为你是一个注册脚本做回发时使用的UpdatePanel

MSDN您需要用户的ScriptManager类:ScriptManager.RegisterStartupScript

用来添加客户端

ScriptManager.RegisterStartupScript方法当控件被包装在UpdatePanel中时脚本到页面。

ASPX页面

<div> 
<asp:ScriptManager ID="ScriptManager1" runat="server"> 
</asp:ScriptManager> 
<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <asp:Label ID="lblDisplayDate" runat="server" Text="Label"></asp:Label> 
     <asp:Button ID="btnPostback" runat="server" onclick="btnPostback_Click" 
     Text="ClickMe" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 
</div> 

代码隐藏注册启动脚本

protected void btnPostback_Click(object sender, EventArgs e) 
{ 
    System.Text.StringBuilder sb = new System.Text.StringBuilder(); 
    sb.Append(@"<script language='javascript'>"); 
    sb.Append(@"var lbl = document.getElementById('lblDisplayDate');"); 
    sb.Append(@"lbl.style.color='red';"); 
    sb.Append(@"</script>"); 

    ScriptManager.RegisterStartupScript(btnPostback,this.GetType(), "JSCR", sb.ToString(),false); 

} 

详细信息:Add JavaScript programmatically using RegisterStartupScript during an Asynchronous postback

5

在我的情况ScriptManager.RegisterStartupScript不起作用。

不起作用:

ScriptManager.RegisterStartupScript(Me, 
    Me.GetType(), 
    String.Format("Data{0}", Me.ID), 
    "<script>alert(111);</script>", 
    False) 

工作:

ScriptManager.RegisterStartupScript(Me.Page, 
    Me.GetType(), 
    String.Format("Data{0}", Me.ID), 
    "<script>alert(111);</script>", 
    False) 

Me的例子是从System.Web.UI.WebControls.WebParts.WebPart

+0

附加的'.Page'也适用于'MasterPage'中注册的脚本。 – 2017-07-03 17:14:30

0

这对我的作品时,我不喜欢这样

继承了我的自定义控件
Private Sub test() 
     ScriptManager.RegisterStartupScript(Me.Page, Me.GetType(), "k1", "alert('hello')", True) 
    End Sub 

但是当我添加SweerAlert它它不会工作

Private Sub test() 
      ScriptManager.RegisterStartupScript(Me.Page, Me.GetType(), "k1", "swal('Please Provide All Valid Message Information!')", True) 
     End Sub 

你有为什么它不工作的任何想法。

+0

也许你没有在你的页面导入sweetalert?或者可能是你的swal('请提供所有有效消息信息!')在添加sweetalert之前执行 – feeeper 2015-11-12 07:20:42

相关问题