原贴:
http://community.csdn.net/Expert/topic/5204/5204316.xml?temp=.9985926再简单一点:
如何在用户控件里面的Buttion点击后来执 
protected void UsBtn_Click(object sender, EventArgs e)
{
    ...
    //
    ?           //  调用主页面的Btn_Click
    ?           //  调用主页面的SetText
}protected void Btn_Click(object sender, EventArgs e)
{
    T1.Text="Btn_Click";   
}
public void SetText(string value)
{
   T1.Text="Void";
}

解决方案 »

  1.   

    用户控件直接Response.Write("<script>Mainpage();</script>");main Page:
    fuction Mainpage()
    {
       //主页面按钮ID
       Btn.click();
    }
      

  2.   

    1.定义接口
    public interface iDoAction
    {
     void SetText(string Value);
    }
    2.调用的页面继承接口如 WebForm1 : System.Web.UI.Page,iDoAction
    同时完成接口的实现即L
    public void SetText(string value)
    {
       T1.Text="Void";
    }3.在用户控件的click事件中.private void Button1_Click(object sender, System.EventArgs e)
    {
    ((iDoAction)this.Page).SetText("EEEEEEE");
    }
      

  3.   

    RE:
    找不到类型或命名空间名称“iDoAction”(是否缺少 using 指令或程序集引用?)
    ascx.cs:
    public partial class uc : System.Web.UI.UserControl, iDoAction
    {   
        public void Button1_Click(object sender, EventArgs e)
        {
            ((iDoAction)this.Page).SetText("EEEEEEE");
        }
    }
    aspx:
    public partial class _Default : System.Web.UI.Page
    {
        public interface iDoAction
        {
            void SetText(string Value);
        }
        public void SetText(string value)
        {
            T1.Text = "Void";
        }
      
    }
      

  4.   

    public interface iDoAction
        {
            void SetText(string Value);
        }
    这个是一个接口,不能写在类里面,它和类是同级别的,单独做个文件,或写在class的外面.
      

  5.   

    public partial class _Default : System.Web.UI.Page
    继承接口public partial class _Default : System.Web.UI.Page,iDoAction
      

  6.   

    ascx
    public partial class uc : System.Web.UI.UserControl    
    {   
        public void Button1_Click(object sender, EventArgs e)
        {
            ((iDoAction)this.Page).SetText("EEEEEEE");
        }
    }
    里面提示找不到类型或命名空间名称“iDoAction”(是否缺少 using 指令或程序集引用?)
      

  7.   

    让页面继承一个类 A:
    A中有一个function 如:Example()
    页面中重写这个方法,在控件的btn_click中这样写:
    (this.Page as A).Example();
      

  8.   

    private void Button2_Click(object sender, System.EventArgs e)
      {
       this.Response.Write("<script>window.opener.document.all('Button1').click();window.close();</script>");
      }
      

  9.   

    aspx:
    public partial class _Default : System.Web.UI.Page, iDoAction
    {
       
        public void SetText(string value)
        {
            T1.Text = "Void";
        }
      
    }
    class1.cs
    public class Class1
    {
    public Class1()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //
    }
        public interface iDoAction
        {
            void SetText(string Value);
        }
    }
    ascx.cs
    public partial class uc : System.Web.UI.UserControl    
    {   
        public void Button1_Click(object sender, EventArgs e)
        {
            ((iDoAction)this.Page).SetText("EEEEEEE");
        }
    }
      

  10.   

    class1.cs
    public class Class1
    {
    public Class1()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //
    }
        public interface iDoAction
        {
            void SetText(string Value);
        }
    }
    ================把class1.cs中的所有内容去掉.
    只有: public interface iDoAction
        {
            void SetText(string Value);
        }==================
      

  11.   

    那如果我有多个地方要实现这样的功能的话
    class1.cs
    这里面要怎么写?
    是不是要每一个都要写一个事件比如我再加一个GetText,那么是不是
    class1.cs:
    public interface iDoAction
    {
        void SetText(string Value);
    }
    public interface iDoAction1
    {
        void GetText(string Value);
    }
    aspx.cs:
    public partial class _Default : System.Web.UI.Page, iDoAction,iDoAction1
    还是有更简单的方法
      

  12.   

    只需要在iDoAction 再加一个GetText 声明就可以了.不用再添加一个接口public interface iDoAction
    {
        void SetText(string Value);
    string GetText();
    }
      

  13.   

    我用主页面调用用户控件是这样的:
    ascx.cs:
    public void SetText(string value)
    {
        T1.Text = "Void";
    }
    aspx.cs:
    ((uc)UC1).SetText("OK");
    ------------------------------------
    这样就可以了,为什么用户控件调用主页面就这么复杂谢谢
      

  14.   

    用户控件之所以成为控件,通常应该要求它有点通用性,可以拖入任何容器里,不要给将来的使用和维护带来逻辑上的烦恼。因此,控件应该对自己的客户(主页面)不提假设任何过分的操作借口,而应该使用事件进行通知。你的控件可以声明:public EventHandler UsbBttonClicked;然后你的页面注册事件处理程序:((yourUserControlType)yourUserControl).usbButtonClicked += .....你的用户控件就像不同的Button、DropdownList、TextBox等一样使用,只不过要如上进行强制类型转换(因为yourUserControl声明的类型是Control而不是具体的yourUserControlType),其它的地方不需要太多曲折。
      

  15.   

    用事件比较好,用接口不好,因为那样的话所有要用这个控件的页面必须实现接口,没道理ascx.cs
    public evetn EventHandler click;
    protected void UsBtn_Click(object sender, EventArgs e)
    {
       if( click != null )
         click(sender,e);
    }
    aspx.cspublic page_Load( ... )
    {
         youracsx1.click+=new EventHandler( page_event );
    }
      

  16.   

    同意sp1234(Ajax比赛会是一个淘汰赛吗?) 控件中最好不要回调使用对象的方法.因为使用对象千差万别.
    如果非要在调用对象中使用某些代码.可以采取事件通知方式.
      

  17.   

    哦,是的,我丢了一个词:public EventHandler UsbBttonClicked;应为public event EventHandler UsbBttonClicked;
    可能初学者最难发现的就是需要强制类型转换,否则就无法发现事件的正确写法。以后对任何两个组件之间的关系都要解耦,如果A了解B的接口,那么就绝对不要B了解A的接口(某些模式下甚至双方都不能相互要求),这样就基本上容易进行插件的设计了。如果结构上相互耦合,会在对象比较多的时候有解不开的矛盾来。
      

  18.   

    ascx:
    public partial class uc : System.Web.UI.UserControl    
    {
        public event EventHandler click; 
        public void Button1_Click(object sender, EventArgs e)
        {
            if( click != null )
            click(sender,e);
        }
    }
    aspx:
    public void SetText(string value)
    {
        T1.Text = "Void";
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        Uc1.click += new EventHandler(??);
    }
    我用上面的page_event 出错改大小写也不行
    谢谢
      

  19.   

    public event EventHandler click;也不能写在类里面.是一个事件类型.写在class外面.
      

  20.   

    public event EventHandler click; 
    我是写在用户控件ascx里面
      

  21.   

    对,看错了,是应该写在ascx的class里面
      

  22.   

    但是我的没有page_event
    new EventHandler( page_event );
      

  23.   

    在ascx中.public event EventHandler clickl;private void Button1_Click(object sender, System.EventArgs e)
    {
    if(this.clickl != null)
    this.clickl(sender,e);
    }
      

  24.   

    在aspx中private void Page_Load(object sender, System.EventArgs e)

    UC1.clickl +=new EventHandler(UC1_clickl);
    } private void UC1_clickl(object sender, EventArgs e)
    {
    //处理.
    }
      

  25.   

    当前上下文中不存在名称“Uc1_click”
    aspx:
     public void SetText(string value)
        {
            T1.Text = "Void";
        }    protected void Page_Load(object sender, EventArgs e)
        {        
                Uc1.click += new EventHandler(Uc1_click);        
        }
    ascx:
    public event EventHandler click; 
        public void Button1_Click(object sender, EventArgs e)
        {
            if( click != null )click(sender,e);
        }
      

  26.   

    如果你工输入
     Uc1.click += new EventHandler(Uc1_click); 
    系统会自动写上这个事件的实现.否则就要手工写了.Uc1_click事件是你需要的关键啊,怎么忘记了写呢?
    private void Uc1_click(object sender, EventArgs e)
    {
    //处理.
    }
      

  27.   

    cpp2017(幕白兄) 
    sp1234(Ajax比赛会是一个淘汰赛吗?) 
    两个牛人的分就在前面两个贴
    这个贴给其他参于的人谢谢