現在、Sharepoint で実行されている ASP.Net Web サイトに取り組んでいます。問題に取り掛かる前に、背景情報をいくつか教えてください..
SharePoint ページに Web パーツとして追加される UserControls を開発しています。これらの Web パーツの一部は、sharepoint ページが読み込まれるときに動的に読み込まれます。
これを行う方法は次のとおりです。
- 実際のユーザー コントロールをアプリケーション ページにロードするアプリケーション ページ (InfoPage) を作成します。
<form id="frmInfoPage" runat="サーバー"> <div id="infopage" runat="サーバー"></div> </form>
- 次のコードを使用して、「InfoPage」をスクレイピングし、「InfoContainer」の div に追加する UserControl (InfoContainer) を作成します。
<div id="InfoContainerDiv"/> <script language="javascript" type="text/javascript"> var numRando = Math.floor(Math.random() * 101); $("#InfoContainerDiv").load("アプリケーション ページの URL"<%=Query%>&rndNum=" + numRando); </script>
- 次に、このコンテナーを SharePoint ページに配置します...
したがって、問題は、sharepoint ページがレンダリングされるときに、3 つの __VIEWSTATE 隠しフィールド (動的に読み込まれるコントロールと SP ページ用に 2 つ) があり、IE7-9 がコンマで連結することです。すなわち /WSteyxeetYRduiylgkdxr,TUIFbiygutifTUfuvFufVvIUCF,ITcvuVuyfIYRCTECOBPOUIBHv
これにより、サーバーが ViewState をデコードしようとすると、ポストバックでエラーが発生します。
<pre lang="HTML">
The state information is invalid for this page and might be corrupted.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Web.HttpException: The state information is invalid for this page and might be corrupted.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[FormatException: Invalid character in a Base-64 string.]
System.Convert.FromBase64String(String s) +0
System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) +98
System.Web.UI.ClientScriptManager.EnsureEventValidationFieldLoaded() +205
[ViewStateException: Invalid viewstate.
Client IP: 10.0.0.2
Port: 52270
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
ViewState: /wEWOAKyz/ClDQKu1K/fBQLCl57WAQL2s5oZArGPqIAOAp20leQEArOq47oIAuqkk+UGArr75pUEAo3A5PMBAq/69ZkHAqTPzZIBArKB/tECAund0sECAoOVssUPAsbZv7cGAtKIwsUDAqzJytwCAvLwypMPApedlMsPAsb2uIYDAqq989YCAoyOwIYBAurogPQDAqb55aEOApWatccBArCN1+wLAvqjl7IPAsbemgcCq+T48Q0CnKjesQwCt4PAxgYCgumAmA4CgumEmA4CvcCmLQL6o5uyDwK9wKItAqvk/PENAsbengcC4bGArAoC4bG8rAoCnKiisQwCmZKdzAIC2tuR7gICk7OHrQYCvZqnwAEChe3tiAECq5rv3AIC69aW+gkCsaHYzAgC2/SjjgwCoprfugkC98TR6AwCho29jgcC3LrdswwChpymvwM=,/wEWAwLv25y/BQLPi+juDQK8wrfPAQ==,/wEWEQLv25y/BQKV1/6iBwL5ivP7BgKF5rW2DgLkv7KzBQKt56yyBwL0x6mvBgK35/ixAQL23cvUDgLk5ryLCgKfw/3jDAL7wZyxBgKosZu6CAK66OGUCQKHyrWLCQLUyPmPCQKBpr2SCQ==
Referer: blablabla
[HttpException (0x80004005): The state information is invalid for this page and might be corrupted.]
System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError) +148
System.Web.UI.ClientScriptManager.EnsureEventValidationFieldLoaded() +10946558
System.Web.UI.ClientScriptManager.ValidateEvent(String uniqueId, String argument) +64
System.Web.UI.WebControls.HiddenField.LoadPostData(String postDataKey, NameValueCollection postCollection) +62
System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad) +507
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +11042743
System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +11042282
System.Web.UI.Page.ProcessRequest() +91
System.Web.UI.Page.ProcessRequest(HttpContext context) +240
Microsoft.SharePoint.Publishing.TemplateRedirectionPage.ProcessRequest(HttpContext context) +175
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +599
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +171</pre>
私が試したこと:
- すべてのコントロールで EnableViewstate を無効にする (__VIEWSTATE 非表示フィールドはまだ存在する)
- Page_Init で __VIEWSTATE フィールドを削除する (これにより ViewStateMac エラーが発生します)
- ビューステート暗号化モードを「しない」に設定する (違いはありません)
- config で暗号化と viewstateMac を無効にします。(SessionState エラーを取得)
誰かアドバイスや提案をください。十分な情報を提供できれば幸いです。また、この問題を別の方法で行うのではなく、理解したいと思います...デザインは、以前の共有ポイントの問題の結果としてこのようになっています。
ありがとうございました。