Отображать сообщение об ошибке при клике

У меня есть текущая последовательность событий, пользователь открывает страницу отдела (aspx с кодом C# позади) и представлен множеством кнопок:

  • Кнопки запроса, которые передают результаты запроса в единый вид сетки (это работает нормально)
  • Кнопки отправки электронной почты, те же номера, что и у кнопок запросов (это также работает нормально)
  • Кнопка "Экспортировать в Excel", которая экспортирует содержимое вида сетки, после нажатия кнопки запроса, в Excel (это также отлично работает)

Но теперь я пытаюсь сделать навигацию приложения более профессиональной, то есть с помощью сообщений об ошибках, как я уже упоминал выше, пользователь должен сначала нажать кнопку запроса, а затем кнопку "экспорт" или "электронная почта", в противном случае экспортируется файл Excel. или прикрепленный - пустой, поэтому, если первая кнопка, которую пользователь нажимает, не является кнопкой запроса, другие 2 кнопки должны выдавать сообщения об ошибках, указывающие пользователю сначала нажать кнопку запроса, я также хотел бы отобразить сообщение, сообщающее пользователю что письмо было отправлено, могу ли я сделать это с помощью CATCH и TRY? Или, может быть, скрыть другие кнопки и отображать их только после того, как пользователь нажмет кнопку запроса? Я спрашиваю об этом только потому, что у моей кнопки уже есть методы catch и try, поэтому я не знаю, как действовать

Буду признателен за пример кода, потому что я новичок

вот мой код gridview

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true"></asp:GridView>
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>

кнопка Excel

protected void Buttonexcel_Click(object sender, EventArgs e)
{

    try
    {
        Response.Clear();
        Response.Buffer = true;
        Response.ContentType = "application/vnd.ms-excel";
        Response.Charset = "";
        Response.AddHeader("content-disposition", "attachment;filename=dados.xls");
        StringWriter sWriter = new StringWriter();
        HtmlTextWriter hWriter = new HtmlTextWriter(sWriter);
        GridView1.RenderControl(hWriter);
        Response.Output.Write(sWriter.ToString());
        Response.Flush();
        Response.End();
    }
    catch (Exception ex)
    {
        Label1.Text = ex.ToString();
    }

}

кнопка электронной почты

protected void Buttonmail_Click(object sender, EventArgs e)
{
    fn_AttachGrid();
}

public void fn_AttachGrid()
{

    StringWriter sWriter = new StringWriter();
    HtmlTextWriter hWriter = new HtmlTextWriter(sWriter);
    GridView1.RenderControl(hWriter);
    MailMessage mail = new MailMessage();
    mail.IsBodyHtml = true;
    mail.To.Add(new MailAddress("receiver@domain.pt"));
    mail.Subject = "Sales Report";
    System.Text.Encoding Enc = System.Text.Encoding.ASCII;
    byte[] mBArray = Enc.GetBytes(sWriter.ToString());
    System.IO.MemoryStream mAtt = new System.IO.MemoryStream(mBArray, false);
    mail.Attachments.Add(new Attachment(mAtt, "dad.xls"));
    mail.Body = "Hi PFA";
    SmtpClient smtp = new SmtpClient();
    mail.From = new MailAddress("sender@gmail.com", "name");
    smtp.Host = "smtp.gmail.com";
    smtp.UseDefaultCredentials = true;
    System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
    NetworkCred.UserName = "sender@gmail.com";
    NetworkCred.Password = "password";
    smtp.Credentials = NetworkCred;
    smtp.EnableSsl = true;
    smtp.Port = 587;
    smtp.Send(mail);
}

2 ответа

Решение

Вы можете попробовать отключить кнопки "Экспорт" и "Электронная почта" и включить их в событии нажатия кнопки "Запрос". Если вы не хотите их отключать, вы можете установить скрытое поле, в котором будет указано, была ли нажата кнопка "Запрос". В событии click кнопки Query установите значение скрытого поля. На ClientClick В событиях кнопок "Экспорт" и "Электронная почта" напишите некоторый JScript, в котором вы можете прочитать значение скрытого поля. Если значение соответствует кнопке "Запрос", которая еще не была нажата, покажите пользователю сообщение с предупреждением. Если нет, действуйте как обычно.

Для электронной почты попробуйте следующий фрагмент кода:

protected void Buttonmail_Click(object sender, EventArgs e)
{
    try
    {
       fn_AttachGrid();
       Label1.Text="Email sent successfully";
    }
    catch(Exception ex)
    {
       Label1.Text = ex.ToString();
    }
}

При нажатии на кнопку электронной почты, fn_AttachGrid() будет вызван, и если он успешно отправит письмо, сообщение об успехе будет показано пользователю в следующей строке. Если есть исключение, оно будет перехвачено в блоке catch, и пользователю будет показано сообщение об исключении. Как примечание, это хорошая идея, чтобы показать настроенные сообщения об ошибках пользователю вместо сообщения об исключении по умолчанию и регистрировать исключение где-нибудь.

Дипра, я пытался отключить кнопку Excel / E-mail на событии кнопки запроса, но я не получил ничего, не могли бы вы предоставить пример кода?

вот моя кнопка запроса

protected void ButtonQ1_Click(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    SqlConnection connection = new SqlConnection(GetConnectionString());
    connection.Open();
    SqlCommand sqlCmd = new SqlCommand("SQL QUERY", connection);
    SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);
    sqlDa.Fill(dt);
    if (dt.Rows.Count > 0)
    {
        GridView1.DataSource = dt;
        GridView1.DataBind();
    }
    connection.Close();
}

РЕДАКТИРОВАТЬ: я выяснил, как скрыть кнопки, на событии page_load я установил кнопки как невидимые и на каждом событии нажатия кнопки запроса я делаю их видимыми.

однако я все еще не могу получить кнопку электронной почты, чтобы отобразить сообщение о том, что электронная почта была отправлена

РЕДАКТИРОВАТЬ 2: получил, я просто добавил, чтобы отправить кнопку кода электронной почты

ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "anything", "alert('Enviado com sucesso.');", true);
Другие вопросы по тегам