DotNetOpenAuth с Ajax для Visual Studio 2010 .NET 4 проблема - PullRequest
0 голосов
/ 30 июня 2010

Я использую элемент управления OpenIdTextBox от DotNetOpenAuth на нашей странице входа. Мы использовали VS 2008 + .NET 3.5 + Ajax UpdatePanel без каких-либо проблем.

Сегодня мы попытались обновить весь проект до VS 2010 + .NET 4.0, Ajax UpdatePanel выдает ошибку javascript при перенаправлении к провайдеру (например, Google) для входа.

"Sys.WebForms.PageRequestManagerParserErrorException: сообщение, полученное от сервера, не может быть проанализировано. Распространенные причины этой ошибки: изменение ответа путем вызова Response.Write (), фильтров ответа, HttpModules или трассировки сервера. включено "

Есть ли какие-нибудь настройки, которые я могу заставить эту работу? Странная вещь ... это работало на VS 2008 + .NET 3.5. Спасибо ....

Ответы [ 2 ]

1 голос
/ 30 июня 2010

Я не знаю, как работает UpdatePanel, но элементу управления OpenIdTextBox требуется возможность перенаправить весь документ браузера на другой URL-адрес, что, возможно, UpdatePanel не позволяет, потому что он ожидает только ответ контента для обновления небольшой области веб-страница. Так что, возможно, OpenIdTextBox принципиально несовместим с UpdatePanel - только предположение.

Интересно, можете ли вы как-то выбрать на стороне сервера во время обработки страницы, чтобы отключить оптимизацию UpdatePanel, если, например, было вызвано событие OpenIdTextBox_LoggingIn.

В противном случае, конечно, вы можете переместить текстовое поле за пределы UpdatePanel, но, возможно, это невозможно сделать при сохранении внешнего вида веб-страницы.

Я мог бы рассказать вам, как переопределить способ, которым OpenIdTextBox перенаправляет веб-страницу, но все, что вы можете сделать, что эквивалентно, вероятно, столкнется с той же проблемой.

0 голосов
/ 05 июля 2010

Спасибо, Андрей!Сработало (отвечаю на свой пост).По сути, я решил эту проблему Ajax с помощью «Response.RedirectLocation».

Согласно некоторым статьям, это Ajax-дружественный вызов по ряду причин, я не знаю точно, в чем разница, потому что я думаю, что e.Request.RedirectingResponse делает то же самое.В любом случае, я затем извлек местоположение из заголовка «RedirecingResponse».Я проверил с 8 провайдерами, кажется, работает!

e.Cancel = true; 
OutgoingWebResponse webResponse = e.Request.RedirectingResponse; 
string location = webResponse.Headers["Location"]; 
Response.RedirectLocation = location; 
...