我设计了一个自定义ConfirmButton2控件,继承自Button,源码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;namespace com.cait
{
    [DefaultProperty("Text")]
    [ToolboxData("<{0}:ConfirmButton2 runat=server></{0}:ConfirmButton2>")]
    public class ConfirmButton2 : Button
    {
        [Bindable(true)]
        [Category("Appearance")]
        [DefaultValue("")]
        [Localizable(true)]
        public string ConfirmMessage                // 确认对话框中提示文字
        {
            get
            {
                String msg = (String)ViewState["ConfirMessage"];
                return ((msg == null) ? "您确认吗" : msg);
            }
            set
            {
                ViewState["ConfirMessage"] = value;
            }
        }        // 在生成按钮的时候增加一个属性
        protected override void AddAttributesToRender(HtmlTextWriter writer)
        {
            this.Attributes.Add("onclick", 
                String.Format("return buttonconfirm('{0}');", this.ConfirmMessage));            base.AddAttributesToRender(writer);
        }        // 生成内容使用 Button 的默认生成方法,不再进行修改        // 此方法将在生成之前被调用,我们在这里进行脚本的检查和注册
        protected override void OnPreRender(EventArgs e)
        {            if (!this.Page.ClientScript.IsClientScriptBlockRegistered("Confirm"))            {
                // 加入脚本函数
                string script = "<script>\r\n function buttonconfirm(msg)\r\n {return window.confirm(msg);}\r\n</script>";
                this.Page.ClientScript.RegisterClientScriptBlock(
                    this.GetType(),
                    "Confirm",
                    script);
            }            base.OnPreRender(e);
        }
    }
}我在主页面,拖了2个 这种类型的按钮上去。。随后我就去跟踪这个OnPreRender(EventArgs e)函数,我发现,程序2次调用到了这个函数,
第一次,this.Page.ClientScript.IsClientScriptBlockRegistered("Confirm") 为false,随后就开始注册客户端脚本Confirm块了。第二次,程序再一次到了断点this.Page.ClientScript.IsClientScriptBlockRegistered("Confirm") 处,但是仍然返回false,不知道为什么会这样,再次注册脚本块后,页面就显示出来了。我打开页面源码,发现只有一段注册脚本,并没有重复注册,有谁能告诉我这个原因吗???<script>
function buttonconfirm(msg)
 {return window.confirm(msg);}
</script>