Обработка HttpRequestValidationException изящно и совместима с ASP.net AJAX? - PullRequest
2 голосов
/ 07 сентября 2008

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

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

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

Ответы [ 3 ]

2 голосов
/ 09 сентября 2008

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

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

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

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

0 голосов
/ 08 сентября 2008

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

...