2010-06-30 63 views
0

我在登录页面上一直使用DotNetOpenAuth的“OpenIdTextBox”控件。我们使用VS 2008 + .NET 3.5 + Ajax UpdatePanel,没有任何问题。在Visual Studio 2010 .NET 4上使用Ajax的DotNetOpenAuth问题

今天,我们试图以整个项目升级到VS 2010 + .NET 4.0,Ajax的UpdatePanel的给了我一个JavaScript错误时重定向到供应商(如谷歌)进行登录。

“SYS。 WebForms.PageRequestManagerParserErrorException:无法解析从服务器接收到的消息。此错误的常见原因是通过调用Response.Write(),响应筛选器,HttpModules或服务器跟踪已启用修改响应时“

有什么设置可以使这项工作?奇怪的是...它在VS 2008 + .NET 3.5上工作。谢谢....

回答

1

我不知道UpdatePanel是如何工作的,但OpenIdTextBox控件需要将整个浏览器文档重定向到另一个URL,这可能是UpdatePanel不允许的,因为它只需要一个内容响应更新网页的一个小区域。所以也许OpenIdTextBox从根本上与UpdatePanel不兼容 - 只是一个猜测。

我不知道你是否可以在处理页面时以某种方式在服务器端选择禁用UpdatePanel的优化,例如,如果OpenIdTextBox_LoggingIn事件被触发。

否则当然你可以将文本框移到UpdatePanel之外,但也许这样做不能保持yoru网页的外观。

我可以告诉你如何重写OpenIdTextBox重定向网页的方式,但是你可能做的任何等价的操作都可能会遇到同样的问题。

+0

嗨安德鲁..是的,如果你能告诉我如何覆盖OpenIdTextBox重定向请吗?这将是有益的..真的很感激。 – userb00 2010-07-01 00:44:10

+0

重写LoggingIn事件,并设置'e.Cancel = true'来停止控件执行重定向。然后,您可以使用'e.RedirectingResponse'中的信息自行执行重定向。但要小心。它*不*总是只是一个简单的301重定向与URL。该'RedirectingResponse'可以包含一个自我发布的HTML FORM,用于额外的大型验证请求。因此,您必须将*对象中的所有数据发送给客户端以保证其可靠性。 – 2010-07-01 01:40:00

+0

谢谢安德鲁! – userb00 2010-07-05 18:12:39

0

谢谢安德鲁!它工作(我正在回答我自己的帖子)。基本上,我通过使用“Response.RedirectLocation”来解决这个Ajax问题。

根据一些文章,这是一个Ajax友好的调用,出于某些原因,我不完全知道有什么区别,因为我猜“e.Request.RedirectingResponse”正在做同样的事情。无论如何,我然后从“RedirecingResponse”标题中提取位置。我测试了8个提供商,它似乎工作!

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