2012-07-25 60 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