2012-08-05 154 views
0

我有一个组合自定义控件发送电子邮件。邮件按钮点击发送。但是,我点击按钮两次后发送邮件。有人知道为什么会发生这种情况,我该如何解决?下面是代码:自定义控件OnButtonClick事件处理程序覆盖C#

namespace EmailControl 
{ 
    [DefaultProperty("Text")] 
    [ToolboxData("<{0}:ServerControl1 runat=server></{0}:ServerControl1>")] 
    public class ServerControl1 : WebControl,INamingContainer 
    { 
     public string Text 
     { 
      get { return ViewState["Text"] as string ?? "[" + this.ID + "]"; } 
      set { ViewState["Text"] = value; } 
     } 

     public string Host 
     { 
      get { return ViewState["host"] as string ?? "[" + this.ID + "]"; } 
      set { ViewState["host"] = value; } 
     } 

     public string From 
     { 
      get { return ViewState["from"] as string ?? "[" + this.ID + "]"; } 
      set { ViewState["from"] = value; } 
     } 

     public int Port 
     { 
      get { return (int) ViewState["port"]; } 
      set { ViewState["port"] = value; } 
     } 

     public string UserName 
     { 
      get { return ViewState["user"] as string ?? "[" + this.ID + "]"; } 
      set { ViewState["user"] = value; } 
     } 

     public string Password 
     { 
      get { return ViewState["pass"] as string ?? "[" + this.ID + "]"; } 
      set { ViewState["pass"] = value; } 
     } 

     TextBox txtEmail; 
     TextBox txtBody; 
     TextBox txtSubject; 
     Button btnSend; 

     protected override void CreateChildControls() 
     { 
      txtEmail = new TextBox(); 
      txtEmail.ID = "txtEmail"; 
      txtEmail.AutoPostBack = true; 
      LiteralControl l1 = new LiteralControl("<br/>"); 
      txtSubject = new TextBox(); 
      txtSubject.ID = "txtSubject"; 
      txtEmail.AutoPostBack = true; 
      this.Controls.Add(txtEmail); 
      this.Controls.Add(txtSubject); 
      LiteralControl l2= new LiteralControl("<br/>"); 
      txtBody = new TextBox(); 
      txtBody.ID = "txtBody"; 
      txtBody.AutoPostBack = true; 
      txtBody.TextMode = TextBoxMode.MultiLine; 
      txtBody.Width = 200; 
      txtBody.Height = 200; 
      this.Controls.Add(txtBody); 
      btnSend = new Button(); 
      btnSend.ID = "btnSend"; 
      btnSend.Width = 100; 
      btnSend.Text = "Send"; 
      btnSend.Click += new EventHandler(OnButtonClick); 
      this.Controls.Add(btnSend); 
     } 

     protected void OnButtonClick(object sender,EventArgs e) 
     { 
      TextBox txtEmail = (TextBox)this.FindControl("txtEmail"); 
      MailMessage msg = new MailMessage(From,txtEmail.Text); 
      TextBox txtSubject = (TextBox)this.FindControl("txtSubject"); 
      TextBox txtBody = (TextBox)this.FindControl("txtBody"); 
      msg.Subject = txtSubject.Text; 
      msg.Body = txtBody.Text; 

      SmtpClient smtp = new SmtpClient(); 
      smtp.Host = Host; 
      smtp.Port = Convert.ToInt32(Port); 
      smtp.EnableSsl = true; 
      smtp.Credentials = new System.Net.NetworkCredential(UserName, 
       Password); 
      smtp.Send(msg); 
     } 
    } 
} 

在ASPX页面的代码:

protected void Page_Load(object sender, EventArgs e) 
{ 
    ServerControl11.Host = "smtp.gmail.com"; 
    ServerControl11.Port =25; 
    ServerControl11.UserName = "*******************@gmail.com"; 
    ServerControl11.Password = "************"; 
    ServerControl11.From = "******************@gmail.com"; 
} 
+1

为了吸引更多的答案,你应该添加相应的语言或工具,你正在使用的标签。你可以通过[编辑你的问题](http://stackoverflow.com/posts/11814971/edit)并在编辑页面底部添加标签来实现。 – assylias 2012-08-05 08:37:54

+0

您是否尝试调试它?你的事件是否被解雇了两次? – 2012-08-05 11:34:13

回答

相关问题