Обработка исключений UpdatePanel
В тех случаях, когда исключения возникают в UpdatePanels, которые я реализовал в веб-приложении ASP.NET, которое я создаю, они вызывают ошибку JavaScript на странице с некоторым выходом ошибки высокого уровня, доступным в предупреждении. Это нормально для разработки, но, как только система находится в производстве, она явно не подходит по нескольким причинам. Я могу окружить неприятные действия с помощью Try Catch и т.д., Чтобы контролировать ошибку Javascript, но в некоторых случаях я хочу предпринять действия на главной странице и т.д., Чтобы поддерживать пользовательский интерфейс.
Как мне обрабатывать ошибки, возникающие в UpdatePanels, изящно, чтобы обеспечить бесшовную реализацию без ошибок Javascript?
Ответы
Ответ 1
Вы можете использовать комбинацию события AsyncPostBackError на ScriptManager (серверной стороне) и событие EndRequest на странице PageRequestManager (на стороне клиента), чтобы полностью обрабатывать ошибки на стороне сервера при использовании UpdatePanel.
Вот несколько ресурсов, которые вам помогут:
Настройка обработки ошибок для элементов управления ASP.NET UpdatePanel
Настройка обработки ошибок для ASP.NET UpdatePanel
Вот простой пример:
// Server-side
protected void ScriptManager1_AsyncPostBackError(object sender,
AsyncPostBackErrorEventArgs e) {
ScriptManager1.AsyncPostBackErrorMessage =
"An error occurred during the request: " +
e.Exception.Message;
}
// Client-side
<script type="text/javascript">
function pageLoad() {
Sys.WebForms.PageRequestManager.getInstance().
add_endRequest(onEndRequest);
}
function onEndRequest(sender, args) {
var lbl = document.getElementById("Label1");
lbl.innerHTML = args.get_error().message;
args.set_errorHandled(true);
}
</script>
Ответ 2
Я написал здесь про более простой способ сделать это:
http://www.wagnerdanda.me/2010/01/asp-net-ajax-updatepanel-error-exception-handling-the-simple-way/
Если вы просто хотите исправить ошибку JavaScript в JavaScript и отобразить сообщение об исключении для пользователя, вам просто нужно добавить это на свою главную страницу где-нибудь после объявления формы:
<!-- This script must be placed after the form declaration -->
<script type="text/javascript">
Sys.Application.add_load(AppLoad);
function AppLoad() {
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequest);
}
function EndRequest(sender, args) {
// Check to see if there an error on this request.
if (args.get_error() != undefined) {
var msg = args.get_error().message.replace("Sys.WebForms.PageRequestManagerServerErrorException: ", "");
// Show the custom error.
// Here you can be creative and do whatever you want
// with the exception (i.e. call a modalpopup and show
// a nicer error window). I will simply use 'alert'
alert(msg);
// Let the framework know that the error is handled,
// so it doesn't throw the JavaScript alert.
args.set_errorHandled(true);
}
}
</script>
Вам не нужно ловить OnAsyncPostBackError, даже если вы не хотите настраивать сообщение. Перейдите к моему сообщению в блоге, если вы хотите получить дополнительную информацию об этом.
Ответ 3
Не могли бы вы переопределить метод ошибки на уровне страницы, поймать исключение и обработать, как вы считаете нужным.
protected override void OnError(EventArgs e)
{
//show error message here
}