ScriptManager.RegisterClientScriptBlock l'inscription de scripts deux fois

Sur le OnPreRender de mon serveur personnalisé de contrôle, je suis l'enregistrement d'une alerte popup à chaque fois que la page est chargée, après une publication partielle (add_pageLoaded(function() { alert('Salut')})). Je ne veux ce à être appelé qu'une seule fois, mais le son est appelée autant de fois qu'il a été partielle des publications. Par exemple, dans le code ci-dessous, si vous ouvrez la page et cliquez sur "Cliquez-moi", vous obtenez une alerte, cliquez sur nouveau et vous aurez deux alertes, trois --> trois alertes et ainsi de suite. Ma compréhension était que ScriptManager.RegisterClientScriptBlock, à l'aide de la scriptKey paramètre a été supposons que pour vérifier si le script a déjà été enregistrée, et si oui, ne pas l'enregistrer de nouveau.
Je ne peut pas enregistrer ce script sur !IsPostBack parce que mon contrôle personnalisé qui sera inséré au cours de Publications dans les pages, afin de l'utiliser !IsPostBack ne comprendront pas mon script.

Voici un exemple simple de ce problème:

ASPX:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"                                          Inherits="RegisterClientScriptExperimentation._Default" %>
<%@ Register Assembly="RegisterClientScriptExperimentation"         Namespace="RegisterClientScriptExperimentation" TagPrefix="cc" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>    
        <asp:ScriptManager ID="ScriptManager1" runat="server"/>       
        <asp:UpdatePanel runat="server">
            <ContentTemplate>
                <asp:Panel ID="panel" runat="server"/>                    
            </ContentTemplate>
        </asp:UpdatePanel>        
    </div>
    </form>
</body>
</html>

Code derrière:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
namespace RegisterClientScriptExperimentation
{
public partial class _Default : System.Web.UI.Page
{
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
panel.Controls.Add(new CustomControl());
}
}
public class CustomControl : CompositeControl
{
private Button button;
public CustomControl()
{
button = new Button();
button.Text = "Click me";
}
protected override void CreateChildControls()
{
Controls.Clear();
Controls.Add(button);
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
StringBuilder _text = new StringBuilder();
_text.Append("var prm = Sys.WebForms.PageRequestManager.getInstance();");
_text.Append("prm.add_pageLoaded(function() { alert('Page Loaded'); });");
if (null != System.Web.UI.ScriptManager.GetCurrent(Page) && System.Web.UI.ScriptManager.GetCurrent(Page).IsInAsyncPostBack)
System.Web.UI.ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "customControlScript", _text.ToString(), true);
else
Page.ClientScript.RegisterStartupScript(this.GetType(), "customControlScript", _text.ToString(), true);
}
}
}