开发ASP.Net服务器复合控件时

    (-)如果用的是撰写不是呈现的话,如:
          protected override void CreateChildControls()
        {
              ...
               Button button1 = new Button();
               button1.text = "b1";
               Controls.Add(button1);

               Button button2 = new Button();
               button2.text = "b2";
               Controls.Add(button2);
               ...
        }
        那么,如何调用IPostBackEventHandler接口方法RaisePostBackEvent呢?
        感觉上不行,因为Button控件没有对应的可以赋值的Name来记录UniqueID,这样应该不会找到对应的回发事件处理吧。
        PS:当然,除了直接连接Button的Click事件的解决办法情形:
           ...      
           Button button1 = new Button();
           button1.text = "b1";
           // button1Click可以跟对应的公开事件连接。
           button1.Click = new EventHandler(button1Click);
           Controls.Add(button1);
           ...
   
     (二)如果用呈现逻辑+事件冒泡的话,如:
        protected override void Render(HtmlTextWriter writer)
        {
           ...
           // Submit
           writer.AddAttribute(HtmlTextWriterAttribute.Type, "Submit");                 
           writer.AddAttribute(HtmlTextWriterAttribute.Name,this.UniqueID);
           writer.AddAttribute(HtmlTextWriterAttribute.Value,"Submit");
          
           writer.RenderBeginTag(HtmlTextWriterTag.Input);   
           writer.RenderEndTag();

           // Click
           writer.AddAttribute(HtmlTextWriterAttribute.Type, "Submit");
           writer.AddAttribute(HtmlTextWriterAttribute.Name,this.UniqueID);
           writer.AddAttribute(HtmlTextWriterAttribute.Value,"Click");
          
           writer.RenderBeginTag(HtmlTextWriterTag.Input);   
           writer.RenderEndTag();
           ...
        }
        如果仅仅是依靠捕捉回发处理的话如何对两个按钮区别。

    (三)总之,我觉得不是无理取闹,只是想更清楚事件冒泡和事件回发处理的深入一些的分析。所以,我把这个装进空瓶子。



posted on 2005-10-19 16:37  Diego  阅读(373)  评论(0编辑  收藏  举报