Грамотная обработка HttpRequestValidationException и совместимость с ASP.net AJAX?

StackOverflow https://stackoverflow.com/questions/47864

Вопрос

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

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

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

Это было полезно?

Решение

Нашёл и написал об этом в блоге.По сути, 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>

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top