Asp.net 在ascx控件中存储和传输值

Asp.net 在ascx控件中存储和传输值,asp.net,sql,ascx,Asp.net,Sql,Ascx,我有一个问题,我已经挣扎了一段时间,它是关于将值从一个控件转移到另一个控件 基本上我有两个。ascx控件。在control1上:我有一个名为txtEmail的电子邮件文本框。txtEmail用于将电子邮件保存在SQL表中,单击update按钮后,我将加载带有电子邮件文本框的Control2。我需要control1的电子邮件文本框在control2的电子邮件文本框上可用 我试过各种不同的方法,但都没有用。我甚至尝试使用代理和事件,但我无法使其工作 有人知道我怎么做吗 问候 请查看以下代码: pu

我有一个问题,我已经挣扎了一段时间,它是关于将值从一个控件转移到另一个控件

基本上我有两个。ascx控件。在control1上:我有一个名为txtEmail的电子邮件文本框。txtEmail用于将电子邮件保存在SQL表中,单击update按钮后,我将加载带有电子邮件文本框的Control2。我需要control1的电子邮件文本框在control2的电子邮件文本框上可用

我试过各种不同的方法,但都没有用。我甚至尝试使用代理和事件,但我无法使其工作

有人知道我怎么做吗

问候

请查看以下代码:

 public event EventHandler Notify;
     public string Email
    {
        get { return txtEmail.Text; }
        set {Email= value ; }
    }
//按钮来处理更新

protected void btnUpdateDB_Click(object sender, EventArgs e)
    {
        var email = txtEmail.Text.ToString();
        public BaseClass.BAL.MBAL m = new BaseClass.BAL.MBAL();
        var s = new BaseClass.Controllers.m();
        s.email=email;
        if(m.save(s)!=0) txtMsave.Text="Saved...."; 

}





//second control


 public  void notifyEmailChange(object sender,EventArgs e)
    {
        txtUsername.Text = member1.Email;
    }



protected void Page_Load(object sender, EventArgs e)
    {

       if(Page.IsPostBack)
       {
           member1.Notify += new EventHandler(notifyEmailChange);     

            }

    }

     public string email {
    set { txtUsers.Text = value; }}

也许我是在淡化这个问题,但是如果您希望能够读取/写入每个自定义控件上的文本框,只需创建一个公共属性,该属性可以读取和写入两个控件上的文本框

    public string EmailAddress {
        get {
            return txtEmailAddress.Text;
        }
        set {
            txtEmailAddress.Text = value;
        }
    }
现在,包含两个控件的页面可以从第一个控件读取电子邮件地址,并将其写入第二个控件的电子邮件地址文本框中


如果我误解了这个问题,请告诉我。

我过去这样做的方式是

  • UserControl1有一个名为(例如)Notify的自定义事件
  • 包含的控制线通知EventHandler
  • 当notify激发(更新时)时,消费事件处理程序激发,此事件处理程序更新UserControl2上的电子邮件
  • 可能看起来过度工程化了,但因为UserControl2无法“看到”UserControl1,我认为这是一种方式

    示例

    在UserControl1中

    public event EventHandler Notify;
    
    在更新按钮中,单击事件处理程序

    if(Notify != null)
    {
        Notify(this, new EventArgs());
    }
    
    在父控件中

    在页面中加载

    ucUserControl2.Notify += new EventHandler(NotifyUserControl);
    
    并设置消息

    protected void NotifyUserControl(object sender, EventArgs args)
    {
        ucUserControl2.Email = ucUserControl1.Email;
    }
    

    显然,您需要UserControls中的公共属性来公开电子邮件文本

    您确定不需要验证程序来检查两个电子邮件地址是否相同吗?Ben,这不是必需的,因为control1.Email用于创建随机密码。如果这是错误的,那么他们将不会收到登录所需的密码。这是一个不同的设置。基本上,它是一个应该由已知人员(即a公司的员工或特定组织的成员,如scouts等)使用的软件。您好,Zac,您的答案不起作用,因为控件加载在回发上,此时字符串将为空。asp.net提供多种机制来保存数据、查询字符串、,视图状态和会话,所有这些都可以在回发过程中保持字符串。嗨,扎克,我也尝试过这些,但不管出于什么原因,它们都是空的,比如session[“txtemail”]=txtemail.text;然后在另一个控件上调用它是不可能的。我甚至使用了httpcontext,但它们是空的,我认为这只是因为我使用的是自定义控件。如果您不能向会话添加对象并在回发后检索它,那么这与您的自定义控件无关。添加您试图在问题中使用的代码,我们可以尝试提供帮助。您好,这是代码:在control1受保护的bool updateuser(字符串电子邮件){user u=new user();u.Email=txtemail.Text.Tostring();u.updateuser(u);}