Отображать сообщение об ошибке при клике
У меня есть текущая последовательность событий, пользователь открывает страницу отдела (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);