2010-06-30 69 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;