欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.NET Web控件按钮事件加载无效

程序员文章站 2022-05-06 22:46:02
很久不做asp.net 了,工作需要又捡起来,做一个toolbar,动态添加操作按钮。    ///    &nbs...

很久不做asp.net 了,工作需要又捡起来,做一个toolbar,动态添加操作按钮。

   /// <summary>
        /// 初始化构造
        /// </summary> 
        public tktoolbar()
        {
            btnexprot = new button();
            btnexprot.commandname = btn_export;          
            btnexprot.cssclass = "btn_dc";
                  

             btnexprot.click += new eventhandler(btn_click);
             }

  /// 统一处理按钮事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void btn_click(object sender, eventargs e)
        {
            button btn = sender as button;

 if (btn.commandname == btn_export)
            {
                if (onexportclick != null)
                {
                    onexportclick(sender, e);
                }
            }

  }

  /// <summary>
        /// 控件呈现
        /// </summary>
        /// <param name="writer"></param>
        protected override void render(htmltextwriter writer)
        {
            writer.write("<table width=\"" + this.width + "\" border=\"0\" cellspace=\"0\" cellpadding=\"0\"><tr><td align=\"right\">");
           //导出按钮
            if (!string.isnullorempty(buttonexportscript))
            {
                btnexprot.onclientclick = buttonexportscript;
            }

        if (buttonexport && (!rightctrl||(rightctrl && permissionright.exportenable)))
            {
                btnexprot.rendercontrol(writer);
            }

  }

上面代码执行时显示均正常,但是就是服务器端按钮事件无效,郁闷。

折腾了半天,原来是没有将按钮控件添加到控件集合中,

缺少 this.controls.add(btnexprot);这一句。

修改

/// <summary>
        /// 初始化构造
        /// </summary> 
        public tktoolbar()
        {
            btnexprot = new button();
            btnexprot.commandname = btn_export;          
            btnexprot.cssclass = "btn_dc";
                  
             btnexprot.click += new eventhandler(btn_click);

          this.controls.add(btnexprot);
             }

就可以了,原因是,虽然呈现了按钮,但是由于控件树没有构建相互关系,按钮的事件无法进行向上冒泡。

属于低级失误,记于此

 


摘自 ysh的专栏