2012-03-28 59 views
1

我有一个按钮应该发送一个电子邮件的aspx页面...我的代码似乎设置正确,但是当按钮被点击时,什么也没有发生。这是代码。它的目的是显示一个警报,然后重定向到成功页面,但没有任何反应...ASPX按钮 - 没有任何反应

没有onclick,但根据这个,不应该有:http://www.velocityreviews.com/forums/t367616-using-handles-vb-vs-c.html也是指南我从这个代码没有'也可以使用onclick,尽管它已经过时了。

标记是:

<%@ Page Title="Sign Up" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" 
CodeBehind="signup.aspx.cs" Inherits="WebApplication2._Default" %> 

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> 
<h2> 
    Email Service 
</h2> 

Re-enter your email address to confirm signup for updates. 
<br /> 
<table border="0"> 
<tr> 
    <td><b>Email:</b></td> 
    <td><asp:TextBox runat="server" ID="UsersEmail" Columns="30"></asp:TextBox></td> 
</tr> 
<tr> 
    <td colspan="2" align="center"> 
     <asp:Button runat="server" ID="SendEmail" Text="Sign Up"/> 
    </td> 
</tr> 
</table> 

代码隐藏是:

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    protected void SendEmail_Click(object sender, EventArgs e) //Handles SendEmail.Click 
    { 
     try 
     { 
      //!!! UPDATE THIS VALUE TO YOUR EMAIL ADDRESS 
      string ToAddress = "[email protected]"; 

      //(1) Create the MailMessage instance 
      MailMessage mm = new MailMessage(UsersEmail.Text, ToAddress); 

      //(2) Assign the MailMessage's properties 

      mm.Subject = UsersEmail.Text + " would like to sign up for updates"; 
      mm.Body = "Hello, I would like to sign up for updates. My email is " + UsersEmail.Text + ". Thank you."; 
      mm.IsBodyHtml = false; 

      //(3) Create the SmtpClient object 
      SmtpClient smtp = new SmtpClient("[removed]"); 
      smtp.DeliveryMethod = SmtpDeliveryMethod.Network; 

      //(4) Send the MailMessage (will use the Web.config settings) 
      smtp.Send(mm); 
     } 
     catch (Exception ex) 
     { 
      string strError = "<Script language=javascript>alert('Error');</Script>"; 
      Response.Write(strError); 
      Response.Redirect("Success.aspx"); 

     } 

     string strMsg = "<Script language=javascript>alert('Emailsent');</Script>"; 
     Response.Write(strMsg); 
     Response.Redirect("Success.aspx"); 

     //System.Web.HttpContext.Current.Response.Write("<SCRIPT LANGUAGE=""JavaScript"">alert(""Hello this is an Alert"")</SCRIPT>"); 
    } 

} 

}

我真怀疑的onclick是解决方案,无论如何,因为无法处理任何代码..

任何想法?谢谢。

+0

使用的onclick尝试的 2012-03-28 18:10:18

+0

什么是您的aspx.cs文件的名称?它是“signup.aspx.cs”还是“_Default.aspx.cs”? – daniloquio 2012-03-28 18:13:33

+0

我想知道不需要为自定义输入操作连接事件处理程序的印象来自哪里? – 2012-03-28 18:56:34

回答

5

处理程序添加到事件

<asp:Button runat="server" ID="SendEmail" Text="Sign Up" OnClick="SendEmail_Click"/> 

下一页:

如果你这样做:

catch (Exception ex) 
     { 
      string strError = "<Script language=javascript>alert('Error');</Script>"; 
      Response.Write(strError); 
      Response.Redirect("Success.aspx"); 

     } 

你不会知道该错误,任何事情,第一个原因是因为一个重定向是这样做的,所以JavaScript代码不会有机会运行,而下一个原因是捕获这样的异常,什么都不做,你会丢失指令如何解决它。

如果您认为它膨胀,您不需要在标记中设置处理程序。你可以做到这一点是肯定的代码

public class _Default : System.Web.Page 

{ 
    public _Default() 
    { 
     this.Init += (_o, _e) => 
      { 
       SendEmail.Click += SendEmail_Click; 
      }; 
    } 
} 
+1

错误问题的好处。 – David 2012-03-28 18:11:56

+0

@AdrianIftode你是对的AutoEventWireup,我不知道为什么我有那个大脑放屁。我仍然认为,标记中的OnClick不是必需的。 – 2012-03-28 18:25:14

+0

这就是答案...虽然现在我得到的主机名没有找到...我想弄明白的东西 – Paul 2012-03-28 23:50:47

0

您需要分配按钮上的事件处理程序:

<asp:Button runat="server" ID="SendEmail" Text="Sign Up" OnClick="SendEmail_Click" /> 
0

Reference如果Page directiveAutoEventWireup属性设置为true(或者如果它是缺少,因为默认情况下它是true),页面框架会自动调用页面事件,特别是Page_Init and Page_Load方法。在那种情况下,不需要显式的Handler。

以下处理程序不会在AutoEventWireUp = false

protected void Page_Load(object sender, EventArgs e) 
{ 
} 

情况下,当值更改为True执行但这将被执行。


你的第二个问题是你想执行按钮单击事件而不声明它的处理程序。这是不可能的。如果你不想用HTML注册它,那么在下面的代码中有另一种方法可以使用它。

protected void Page_Load(object sender, EventArgs e) 
{ 
     Button b = new Button(); 
     b.Click += new EventHandler(b_Click); 
}