2012-03-28 3 views
1

У меня есть кнопка на странице aspx, которая должна отправлять электронную почту ... мой код выглядит правильно, но при нажатии кнопки ничего не происходит. Вот код. Он предназначен для отображения предупреждения, затем перенаправления на страницу успеха, но ничего не происходит ...ASPX Button - ничего не происходит

Нет onclick, но в соответствии с этим не должно быть: http://www.velocityreviews.com/forums/t367616-using-handles-vb-vs-c.html Также руководство, которое я получил от этого кода, t использовать 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 <жерех: Кнопка Runat = "сервер" ID = "SendEmail" OnClick = "SendEmail_Click" Text = "Sign Up" /> –

+0

что это имя вашего aspx.cs файл? Это «signup.aspx.cs» или это «_Default.aspx.cs»? – daniloquio

+0

Мне интересно, откуда взялось впечатление, что нет необходимости подключать обработчики событий для пользовательских действий ввода? –

ответ

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"); 

     } 

Вы ничего не об ошибке, для первой причины, потому что знаю Redirect делается так, чтобы javascript-код не получил возможность запускаться, и следующая причина заключается в том, что улавливая подобное исключение, ничего не делая с ним, вы потеряете инструкции по его исправлению.

Вам не нужно устанавливать обработчик в разметке, если вы считаете, что он раздувает его. Вы можете сделать это точно в коде

public class _Default : System.Web.Page 

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

Хорошая уловка при ошибке. – David

+0

@AdrianIftode Вы правы в AutoEventWireup, я не знаю, почему у меня был этот мозговой пердит. Я все еще согласен с тем, что OnClick в разметке не нужен. –

+0

Это ответ ... хотя теперь я получаю имя хоста не найден ... что-то для меня, чтобы выяснить – Paul

0

Вы должны назначить EventHandler на кнопку:

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

Reference Если AutoEventWireup атрибут Page directive устанавливается истина (или, если это отсутствует, поскольку по умолчанию это верно), структура страницы вызывает события страницы автоматически, в частности методы Page_Init and Page_Load. В этом случае явный обработчик не требуется.

следующий обработчик не будет выполняться в случае 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); 
} 
Смежные вопросы