Изящная обработка исключения HttpRequestValidationException и совместимость с ASP.net AJAX?

ValidateEvents — отличная функция ASP.net, но желтый экран смерти не так хорош. Я нашел способ изящной обработки исключения HttpRequestValidationException здесь, но это не работает с ASP.net AJAX должным образом.

По сути, у меня есть UpdatePanel с текстовым полем и кнопкой, и когда пользователь вводит HTML в текстовое поле, появляется всплывающее окно JavaScript с сообщением об ошибке, в котором говорится, что не следует изменять ответ.

Поэтому мне интересно, как лучше всего изящно обработать HttpRequestValidationException? Для «обычных» запросов я хотел бы просто отобразить сообщение об ошибке, но когда это запрос AJAX, я бы хотел отбросить запрос и вернуть что-то, указывающее на ошибку, чтобы моя страница интерфейса могла реагировать на это?


person Michael Stum    schedule 06.09.2008    source источник


Ответы (3)


Нашел его и записал об этом в блоге. По сути, EndRequestHandler и args.set_errorHandled — наши друзья.

<script type="text/javascript" language="javascript">
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(EndRequestHandler);

function EndRequestHandler(sender, args) {
    if (args.get_error() != undefined)
    {
        var errorMessage;
        if (args.get_response().get_statusCode() == '200')
        {
            errorMessage = args.get_error().message;
        }
        else
        {
            // Error occurred somewhere other than the server page.
            errorMessage = 'An unspecified error occurred. ';
        }
        args.set_errorHandled(true);
        $get('<%= this.newsletterLabel.ClientID %>').innerHTML = errorMessage;
    }
}
</script>
person Michael Stum    schedule 08.09.2008

хммм, кажется, вам нужно найти какой-то JavaScript для проверки ввода html или валидатора на стороне клиента.

person Sara Chipps    schedule 07.09.2008

Это то, чего я хотел бы избежать, если это возможно, но это кажется намного сложнее, чем ожидалось.

Обычно все советуют использовать AsyncPostBackError ScriptManager, но это не работает, если вызывается в Global.asax. К сожалению, поскольку среда выполнения генерирует исключение HttpRequestValidationException, оно никогда не входит в мой код, и я ничего не могу сделать в Application_Error.

Так что да, это действительно нужно сделать в JavaScript, я просто надеюсь, что есть способ добавить «крюк», такой как функция BeginRequestHandler, чтобы мне не приходилось «взламывать» код Microsoft. Если я найду решение раньше других, я опубликую его здесь :-)

person Michael Stum    schedule 08.09.2008