#c# #.net #web-applications
#c# #.net #веб-приложения
Вопрос:
Кто-нибудь знает, как я могу создать всплывающее окно сообщения на стороне сервера, чтобы оно отображало сообщение об ошибке во всплывающем окне сообщения при сбое процесса сохранения?
Пример:
protected void btnSave_Click(object sender, EventArgs e)
{
try
{
using (TransactionScope scope = new TransactionScope())
{
//save process
scope.Complete();
Response.Redirect(url);
}
}
catch (TransactionAbortedException ex)
{
//pop-up message box to show error message
}
catch (ApplicationException ex)
{
//pop-up message box to show error message
}
}
Как я могу создать всплывающее окно сообщения в catch, чтобы при сбое процесса сохранения пользователю отображалось окно сообщения об ошибке?
Комментарии:
1. Вы хотите, чтобы всплывающее окно появлялось на сервере или клиенте?
2. @Kiranu — пожалуйста, скажи мне, что это был вопрос с подвохом — вы не можете заставить окно сообщения всплывать на сервере!
3. @slugster — Я знаю… но было неясно, было ли то, чего он хотел, возможным (всплывающее окно в клиенте) или невозможным (форма, созданная службой Windows)
Ответ №1:
Попробуйте использовать методы Page.RegisterStartupScript
или ClientScript.RegisterStartupScript
.
Комментарии:
1. Страница. RegisterStartupScript устарел.
2. Привет, Дрю, хороший способ получить принятые ответы — уточнить концепции в вопросе, а затем предоставить конкретный рабочий пример. Альтернативы также всегда хороши. Полный ответ, вероятно, со временем создаст для вас больше точек переполнения стека. Надеюсь, это поможет.
Ответ №2:
ClientScript.RegisterStartupScript(
this.GetType(), "myalert", "alert('" errorText "');", true);
или
Response.Write(
@"<SCRIPT LANGUAGE=""JavaScript"">alert('" errorText "')</SCRIPT>");
Комментарии:
1. @Alex Aza; Я применил код, который вы указали перед try{}catch () .. похоже, что ни одно окно сообщения не всплывало
2. @Jin Yong — странно, я тестировал это на .NET 2, 3.5 и 4 — у меня сработало.
3. Возможно, javascript отключен в браузере. Попробуйте включить его.
4. @Jin — Я только что понял, что вы не можете протестировать это таким образом, вы не можете применить это перед попыткой catch, потому что вы перенаправляете на run
Response.Redirect(url);
в обычном сценарии, который перенаправляет на другую страницу. Для правильного тестирования добавьте одну мою строку и выполните возврат сразу после этой строки.5. @Jin Yong — из любопытства, какое решение сработало для вас? Вы использовали ‘Страницу. RegisterStartupScript’?
Ответ №3:
Вот один из способов:
/// ---- ShowAlert --------------------------------
///
/// <summary>
/// popup a message box at the client
/// </summary>
/// <param name="page">A Page Object</param>
/// <param name="message">The Message to show</param>
public static void ShowAlert(Page page, String message)
{
String Output;
Output = String.Format("alert('{0}');",message);
page.ClientScript.RegisterStartupScript(page.GetType(), "Key", Output, true);
}
Комментарии:
1. Чем это отличается от моего ответа? 🙂
2. @Alex — Когда я опубликовал свой ответ, ваш еще не был виден.
3. это странно. Разница в наших ответах составляет 15 минут. Итак, теперь, когда вы видите это, вы можете удалить дублирующийся ответ или изменить его на другой, верно?
Ответ №4:
Хотя упомянутые сценарии alert () в порядке, они кажутся довольно любительскими. Я бы порекомендовал два варианта.
-
На вашей странице должна быть метка, которая обычно скрыта красным цветом шрифта и выделена жирным шрифтом. Затем просто сделайте его видимым и установите текст в поле ошибка.
-
Если вам нужно поведение в диалоговом окне, используйте то, что вам показывают все, но вместо того, чтобы показывать предупреждение, выберите что-нибудь приятное из пользовательского интерфейса jQuery с красивым значком ошибки и даже ссылкой справки или чем-то еще в диалоговом окне. Вот пример:http://jqueryui.com/demos/dialog/#modal-message
Конечно, если вы хотите, чтобы ваше приложение казалось более надежным, не показывайте им никаких ошибок. 🙂