RegisterStartupScript doesn’t work with ScriptManager,Updatepanel. Why is that?

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 trigggers and update panel. And the alert message doesnt show up on timer_tick event

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

When you use an UpdatePanel, then you can not call JavaScript using ClientScript as you have tried to. You have to use ScriptManager.RegisterStartupScript instead.

So change your

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

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

Method 2

You need to user ScriptManager class because you are register script when doing postback and using updatepanel

MSDN: ScriptManager.RegisterStartupScript

ScriptManager.RegisterStartupScript method used to add client script to a page when the control is wrapped inside an UpdatePanel.

ASPX page

<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>

CodeBehind Register StartUp Script
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);

}

Detail : Add JavaScript programmatically using RegisterStartupScript during an Asynchronous postback

Method 3

In my case ScriptManager.RegisterStartupScript didn’t work too.

Not work:

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

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

Me in the example is my custom control inherited from System.Web.UI.WebControls.WebParts.WebPart

Method 4

It must be un little bit later but I found the soluce here http://forums.asp.net/p/1117430/5483679.aspx/1

You have to use System.Web.UI.ScriptManager.RegisterClientScriptBlock instead of Page.ClientScript.RegisterStartupScript

Method 5

In case Page seems inaccessible from the class you are in.

Page page = HttpContext.Current.CurrentHandler as Page;
        

ScriptManager.RegisterStartupScript(page,page.GetType(), Guid.NewGuid().ToString(), yourScriptVariable, true);


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x