或者可以这样说,在用户控件执行命令的时候,让父页面执行操作?

解决方案 »

  1.   

    正规的做法,或者说“架构师”使用的做法,是通过RaiseBubbleEvent传递参数。因为控件设计思路就是被页面随意组合进布局中,控件是服务,页面是客户。控件不能对调用者有要求,只能通过事件通知调用者。
      

  2.   

    当然也可以自定义事件。这要看你的“页面”的设计思路——是想响应自定义类型的组件还是WebControl。
      

  3.   

    比如,我调用一个更新数据的用户控件,按一下确认,刷新父页面的DATAGRID
      

  4.   

    在用户控件中写一个事件(例如叫做refresh),“确认”按钮的事件触发这个对外的事件。页面响应这个refresh事件通知。
      

  5.   

    当然,如果需要传递参数,可以用refresh事件的参数从里向外传递参数。
      

  6.   

    有个简单有效的方法,大概就是你要的
    你在子控件的按钮事件中最后一句加入如下:
    Response.Redirect("父页.aspx?x=1");
    通过父页的page_laod事件中判断是否接收到x参数来决定是否刷新父页面的DATAGRID
    刚试过可以的,呵呵。
      

  7.   

    dayasky,你到是提醒了我一个思路,我可以父页面做成一个参数来传递,这样就可以在所有页面使用这个控件了。
    sp1234,写事件,是无法触发父页面的,我做了实验。
      

  8.   

    比如包含用户控件的页面叫default.aspx , 后台类叫 
    public class _default:page
    {}
    在用户控件里可以这样
    _default pg = (_defalut)this.page;
    pg.ToSomething();
    ====
    不过我感觉最好用事件,
      

  9.   

    做起来怎么会简单呢?显然,用户控件在响应“确认”按钮的事件时触发refresh事件仅仅是一条简单的在服务器内执行的调用函数代码,接下来页面的处理事件方法就被自动执行了;而那个客户端重定向,待地球另一端的浏览器再次发回请求,页面再在一堆判断中去查找是否有x=1来判断是否按了刷新,然后再去掉用处理刷新方法,这显然不简单。最重要的,所谓简单性是说你维持使用“控件”的基本理念,就是说这个控件被你“数十次地重复”使用他也许是在另一个用户控件中的一部分,而不是页面的一部分,至少某个固定页面的。某则,难道你所有的此类界面都个别写一个用户控件?
      

  10.   

    控件响应“确认”按钮事件,只是众多需要处理的事件中的一个!页面上其他事件可能需要更新显示等等,进行其他界面操作。而这个用户控件竟然令客户端丢弃当前页面上的所有状态而重新装载页面!我真的不想去详细分析到底会丢弃多少编程中你认为应该会保留的东西了,反正是个灾难。这就愿不得很多人“骂”asp.net混乱了!其实很多人并不按对象正常的生命期的机制处理。
      

  11.   

    或者可以这样说,在用户控件执行命令的时候,让父页面执行操作?
    ___________________________________________
    给你介绍一个方法试试:
    UserControl比如有个btnSave,点击的时候执行一个Save(),把UserControl放在一个PageBase里面,把Save定义一个虚方法让btnSave来的Click来调用,在用到这个UserControl的页去继承这个PageBase,并在其cs代码里面去重载Save()这个虚方法,那么基本就是点击了UserControl的某个东西,或者执行某个事件,可以让其所在的页面来具体实现了。
      

  12.   

    sp1234可不可以介绍一些在自定义控件应用上比较好的文章或书籍呢?迫切需要,,,我在网上找过关于asp.net面向对象方面的信息,,,但是没有找到觉得很好的
      

  13.   

    父页面->((System.Web.UI.Page)System.Web.HttpContext.Current.Handler)
    操作->((System.Web.UI.Page)System.Web.HttpContext.Current.Handler).Method();