Кнопка ASPX - ничего не происходит - PullRequest
1 голос
/ 28 марта 2012

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

Онклика нет, но в соответствии с этим не должно быть: http://www.velocityreviews.com/forums/t367616-using-handles-vb-vs-c.html Кроме того, руководство, из которого я получил этот код, тоже не использует онклик, хотя оно устарело.

Разметка:

<%@ 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 = "info@removed.org";

            //(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 - это решение в любом случае, потому что оно не обрабатывает какой-либо код ..

Есть идеи? Спасибо.

Ответы [ 3 ]

5 голосов
/ 28 марта 2012

Добавьте обработчик к событию

<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;
          };
    }
}
0 голосов
/ 28 марта 2012

Ссылка Если для AutoEventWireup атрибута Page directive задано значение true (или его отсутствие, так как по умолчанию оно равно true), фреймворк страницы вызывает страницу события автоматически, в частности методы 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);
}
0 голосов
/ 28 марта 2012

Вам нужно назначить обработчик событий на кнопку:

<asp:Button runat="server" ID="SendEmail" Text="Sign Up" OnClick="SendEmail_Click" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...