在自定义服务器控件中增加事件处理程序,但代码运行时没有错误,按钮点击下去却没有反应。应该如何处理呢?(本例中,该自定义控件包括一个Button,和一个Label,我希望用户点击了这个Button后,改变Label的Text属性)

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication1
{
 /// <summary>
 /// Class1 的摘要说明。
/// </summary>
 public class myControl:Control
 {
  Button bt;
  Label lb; 

  protected override void Render(HtmlTextWriter writer)
  {
     bt.RenderControl(writer);
     lb.RenderControl(writer);
  } 

  protected override void CreateChildControls()
  {      bt=new Button();
     Controls.Add(bt);
    lb=new Label();
     Controls.Add(lb);
    bt.Click+=new EventHandler(bt_Click);
    base.CreateChildControls ();
  } 

 private void bt_Click(object sender, EventArgs e)
  {
     this.lb.Text=DateTime.Now.ToString();
  }
 }
}

解决方案添加INamingContainer接口。

INameContainer是一个空接口,所以您不需要实现它的任何接口方法。

例如:

public class myControl:Control,INamingContainer

{.....}

原因是这样的

INameContainer的作用是为myControl中的每一个控件自动指定ID。

同时它也会改变Asp.net接受到event后的处理流程。

如果您的控件中没有加入INamingContainer

ASP.NET page execution cycle

LoadPostData->OnLoad->RaisePostDataChanged->Handle events->OnPrerender->CreateChildControls->SaveViewState->Render->Dispose

* CreateChildControls 在 Handle events 之后被调用,此时button还没有被包含在页面中,所以handle event无法触发button_click事件,直接被丢弃。

加入INamingContainer后

ASP.NET page execution cycle

OnInit-> LoadViewState->LoadPostData->RaisePostDataChanged->CreateChildControls->OnLoad->Handle events->OnPrerender->SaveViewState->Render->Dispose

* Handle events 在 CreateChildControls 后执行。所以能够正确触发button_click事件。

原文地址:http://www.cnblogs.com/chenxizhang/archive/2008/08/17/1269700.html

【转】【Asp.Net】ASP.NET中自定义控件无法响应事件的更多相关文章

  1. jquery 在页面中按回车 响应 事件

    为了用户方便我们往往会在用户回车之后做一些事,比如登陆的时候,填完表单过后,我们习惯性的会直接按回车,当然要处理这个,jquery是很简单的,我们来看看怎么做吧. $(document).ready( ...

  2. asp.net 2.0中新增的web.config的默认namespace功能 (转)

    看上去这个题目比较长,但实际上,我在看资料时发现,这就是说,在asp.net 2.0中,只需要在web.config里定义你要用的那些namespace,则在aspx页面中就不需要再象1.1那样,用 ...

  3. 通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流程[下]:管道是如何构建起来的?

    在<中篇>中,我们对管道的构成以及它对请求的处理流程进行了详细介绍,接下来我们需要了解的是这样一个管道是如何被构建起来的.总的来说,管道由一个服务器和一个HttpApplication构成 ...

  4. ASP.NET Core MVC 中的 [Controller] 和 [NonController]

    前言 我们知道,在 MVC 应用程序中,有一部分约定的内容.其中关于 Controller 的约定是这样的. 每个 Controller 类的名字以 Controller 结尾,并且放置在 Contr ...

  5. 【初学者指南】在ASP.NET MVC 5中创建GridView

    介绍 在这篇文章中,我们将会学习如何在 ASP.NET MVC 中创建一个 gridview,就像 ASP.NET Web 表单中的 gridview 一样.服务器端和客户端有许多可用的第三方库,这些 ...

  6. 如何在ASP.NET Web站点中统一页面布局[Creating a Consistent Layout in ASP.NET Web Pages(Razor) Sites]

    如何在ASP.NET Web站点中统一页面布局[Creating a Consistent Layout in ASP.NET Web Pages(Razor) Sites] 一.布局页面介绍[Abo ...

  7. .NET跨平台之旅:ASP.NET Core从传统ASP.NET的Cookie中读取用户登录信息

    在解决了asp.net core中访问memcached缓存的问题后,我们开始大踏步地向.net core进军——将更多站点向asp.net core迁移,在迁移涉及获取用户登录信息的站点时,我们遇到 ...

  8. ASP.NET Web API中的Controller

    虽然通过Visual Studio向导在ASP.NET Web API项目中创建的 Controller类型默认派生与抽象类型ApiController,但是ASP.NET Web API框架本身只要 ...

  9. 在ASP.NET Web API中使用OData

    http://www.alixixi.com/program/a/2015063094986.shtml 一.什么是ODataOData是一个开放的数据协议(Open Data Protocol)在A ...

随机推荐

  1. 静态代理和利用反射形成的动态代理(JDK动态代理)

    代理模式 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 静态代理 1.新建 ...

  2. Git 账户认证的一些问题

    Mac被水浇了之后,只好用Window 开发了.但是在往Github上提交代码出现了些问题. 1. 提交时总是出现弹出框提示账号认证 之前Mac没有出现过这问题,所以有些怀疑Windows开发环境不友 ...

  3. Linux 发行版本及其基于

    Independent ---> Debian Debian/Ubuntu(LTS) ---> Linux Mint ---> Linux Lite Debian/Ubuntu -- ...

  4. Centos 反向代理创建资料

    1. yum update 2. sh centos.sh 3. sh upgrade_nginx.sh nginx 1.7.0 4. cd /usr/local/nginx/conf/ upload ...

  5. Hbase随笔2

    Hbase是建立在HDFS上的分布式数据库,下图是Hbase表的模型: Hbase这个数据库其实和传统关系数据库还是有很多类似之处,而不是像mongodb,memcached以及redis完全脱离了表 ...

  6. linux特殊符号大全

    #   ;   ;;      .      ,       /       \       'string'|       !   $   ${}   $?      $$   $*  " ...

  7. PHP框架中最喜欢的WindFramework

    题外话, 像我这样从小到大作文打0分居多的人,写文章,实在是没有耐心的,抱歉. 尽管自己也山寨过许多PHP框架,但被山寨的对象中,最喜欢的是WindFramework. Yii其实更好,但太大而全. ...

  8. C# Main函数的 args参数

    网上参考 博客,使用如下代码: using System; using System.Collections.Generic; using System.Linq; using System.Text ...

  9. &lt;c:if&gt;标签的使用

    <c:if>标签用来在页面中实现条件化的判断功能.它的主要目的就是替换Java脚本中的if语句,来实现页面内容的条件化输出功能.这个标签所进行的判读主要是依据表达式来进行的,如果该表达式的 ...

  10. SQL Server实现数据的递归查询

    在一次项目中遇到一种需求,需要记录某产品的替换记录. 实际应用举例为:产品101被201替换,之后201又被303替换,303又被109替换:产品102被202替换,之后202又被105替换. 现在我 ...