我一直在我们的登录页面上使用DotNetOpenAuth的"OpenIdTextBox“控件。我们使用VS2008+ .NET 3.5 + Ajax UpdatePanel没有任何问题。
今天我们尝试将整个项目升级到VS2010+ .NET 4.0,当Ajax UpdatePanel重定向到提供商(比如谷歌)登录时,它会给我一个javascript错误。
"Sys.WebForms.PageRequestManagerParserErrorException:无法分析从服务器收到的消息。出现此错误的常见原因是调用Response.Write()修改响应、启用响应筛选器、HttpModules或服务器跟踪
有没有什么设置可以让我这样做?奇怪的是。它适用于VS2008+ .NET 3.5。谢谢……
发布于 2010-06-30 19:53:10
我不知道UpdatePanel是如何工作的,但是OpenIdTextBox控件需要能够将整个浏览器文档重定向到另一个UpdatePanel,这可能是UpdatePanel不允许的,因为它只希望内容响应更新网页的一小部分。因此,也许OpenIdTextBox与UpdatePanel在根本上是不兼容的--这只是一个猜测。
我想知道您是否可以在处理页面时在服务器端选择禁用UpdatePanel的优化,例如是否触发了OpenIdTextBox_LoggingIn事件。
当然,你也可以将文本框移到UpdatePanel之外,但也许不能在保持yoru网页外观的同时做到这一点。
我可以告诉你如何重写OpenIdTextBox重定向网页的方式,但是你可能做的任何等价的事情都可能会遇到同样的问题。
发布于 2010-07-05 18:12:19
谢谢安德鲁!它起作用了(我正在回复我自己的帖子)。基本上,我使用"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;
https://stackoverflow.com/questions/3151615
复制