2007年9月17日 星期一

AJAX .NET Accordion - Validation of viewstate MAC failed

問題描述:

在使用AJAX .NET 1.0.618 版本中的 Accordion 時,動態載入不同的 UserControl 元件(.ascx),並透過 UpdatePanel 完成非同步網頁畫面更新,使整個畫面看起來就像 GMail 的操作介面。但有時會載入不同的 UserControl 時會發生如下的錯誤對話框,顯示「Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster、ensure that configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be use in cluster.」,接著網頁的 PostBack 就失效了,無法再進行操作。





目前網路解決方式:

這個問題在網路上已有一些相關的文章,主要是因為在 Page 或是一般 .aspx 網頁中使用了 EnableViewState = true 這個設定(此設定值是預設),因此有相關文章指出當不使用此設定值或設定 EnableViewStateMac = false 即可解決。如果設定 EnableViewState = false 就會造成 Accordion 無法正常使用。

正確解決方式:

這個問題對於是否使用 Accordion 這個 AJAX 的元件的直接關聯性無法得證,目前只知道當動態載入不同的 UserControl 元件時,有些內容有保含巢狀 UpdatePanel,有些是一般靜態網頁內容時,就會產生這個錯誤對話框;或許真的原因仍待確認。但解決方式為在 web.config 的 system.web 區段內或是一般 .aspx 網頁設定 viewStateEncryptionMode="True" 或 viewStateEncryptionMode="False" 即可解決,此設定值預設為 viewStateEncryptionMode="Auto",由此觀之,可能是在動態載入時,預設的情況會切換是否要加密 viewState ,因而造成錯誤。