当前位置:  开发笔记 > 后端 > 正文

ASP.NET:无法验证数据

如何解决《ASP.NET:无法验证数据》经验,为你挑选了3个好方法。

ASP.NET中此异常的原因是什么?显然它是一个视图状态异常,但我无法在抛出异常的页面上重现错误(带有按钮和导航链接的简单两个TextBox表单).

FWIW,我没有运营网络农场.

例外

错误消息:无法验证数据.

错误来源:System.Web

错误目标站点:字节[] GetDecodedData(字节[],字节[],Int32,Int32,Int32 ByRef)

发布数据

VIEWSTATE:

/ wEPDwULLTE4NTUyODcyMTFkZF96FHxDUAHIY3NOAMRJYZ + CKsnB

EVENTVALIDATION:

/ wEWBAK + 8ZzHAgKOhZRcApDF79ECAoLch4YMeQ2ayv/Gi76znHooiRyBFrWtwyg =

异常堆栈跟踪

   at System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError)
   at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString)
   at System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(String serializedState)
   at System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState)
   at System.Web.UI.HiddenFieldPageStatePersister.Load()
   at System.Web.UI.Page.LoadPageStateFromPersistenceMedium()
   at System.Web.UI.Page.LoadAllState()
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.ProcessRequest()
   at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context)
   at System.Web.UI.Page.ProcessRequest(HttpContext context)
   at ASP.default_aspx.ProcessRequest(HttpContext context)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

~William Riley-Land



1> Chris Van Op..:

导致此错误的最可能原因是在所有视图状态加载(用户点击停止或返回按钮)之前停止回发时,视图状态将无法验证并抛出错误.

其他潜在原因:

在生成视图状态的时间与用户将其发回服务器的时间之间回收应用程序池(不太可能).

一个Web机场,其中machineKeys未同步(不是您的问题).

更新:微软关于这个问题的文章.除上述内容外,他们还提出了另外两个可能的原因:

防火墙/防病毒软件修改viewstate

从一个aspx页面发布到另一个.



2> Jeffrey Harr..:

在.NET 3.5 SP1中,RenderAllHiddenFieldsAtTopOfForm属性已添加到PagesSection配置中.

Web.config文件



    

        

    


有趣的是,默认值为true.因此,实质上,如果您使用的是.NET 3.5 SP1,则ViewState会自动呈现在表单的顶部(在加载页面的其余部分之前),从而消除了您获得的ViewState错误.



3> Jon Adams..:

我遇到了某些特定版本的Safari 3的问题.我的解决方案是将ViewState移动到表单的顶部(扩展Page类并覆盖3.5之前的Render方法,或.Net 3.5 SP1及更高版本默认情况下这样做),并将ViewState拆分为几个不同的字段而不是一个怪物文件.请参阅ASP.NET 2.0中的ViewState Chunking(maxPageStateFieldLength)

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有