使用ASP.NET和C#“Base-64字符串中的无效字符”

我在发布页面时遇到了这个问题。 该页面有一个由下拉列表的onchange调用的jquery ajax加载,如果我禁用onchange,post可以工作。

“状态信息对于此页面无效,可能已损坏”

[FormatException: Invalid character in a Base-64 string.] System.Convert.FromBase64String(String s) +0 System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) +72 System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(String serializedState) +4 System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState) +37 System.Web.UI.HiddenFieldPageStatePersister.Load() +113 [ViewStateException: invalid Viewstate. Client IP: 127.0.0.1 Port: User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) ViewState: /wEPDwULLTE+UiQgMjUwLjAwMCwwMDwvc3Ryb25nPmQCCQ8WAh8ABRUxNTYwLjQ0IG08c3VwPjI8L3N1cD5kAgsPFgIfAAUJMyBlIDQgIEQuZAINDw8WBh8ABRBFeGNsdWlyIGRhIGxpc3RhHgdUb29sVGlwBRBFeGNsdWlyIGRhIGxpc3RhHgtOYXZpZ2F0ZVVybAUUI3JlbW92ZUxpbmsgMjEwMDM3NzlkZAIPDw8WBh8DBUB+L3ZlbmRhL2xhbmNhbWVudG...] [HttpException (0x80004005): As informações sobre estado são inválidas para esta página e podem estar corrompidas.] System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError) +106 System.Web.UI.ViewStateException.ThrowViewStateError(Exception inner, String persistedState) +14 System.Web.UI.HiddenFieldPageStatePersister.Load() +217 System.Web.UI.Page.LoadPageStateFromPersistenceMedium() +105 System.Web.UI.Page.LoadAllState() +43 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +6785 System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +242 System.Web.UI.Page.ProcessRequest() +80 System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context) +21 System.Web.UI.Page.ProcessRequest(HttpContext context) +49 ASP.content_search_default_aspx.ProcessRequest(HttpContext context) in c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\web-site-2009\e4bfc9d6\d5d6c855\App_Web_zcb1qfmu.0.cs:0 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +181 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75 

可能是什么原因? 以前有人见过吗?

谢谢

编辑:

所以,我发现了为什么会这样。 在Page_Load的末尾,我编写了一个调用jquery函数的javascript行,该函数将新字段加载到div中。 所以,正如我所看到的,这导致在viewstate上产生不一致。 对于这种情况,禁用ViewState不是一个选项。 它适用于FF,它在IE上有缺陷。 任何人?

谢谢

刚碰到这个。 从您通过jquery加载的页面中删除表单标记。

有同样的问题,我得到错误的原因是因为我将一个完整的表单作为字符串发送到一个javascript方法,然后发布该表单。

这有点沉重,我的解决方法是只将表单数据作为序列化的json发送,然后通过javascript创建和发布表单,就像在这篇文章中一样。

http://weblogs.asp.net/hajan/archive/2011/03/16/posting-from-asp-net-webforms-page-to-another-url.aspx

无效的视图状态对您的记录器或用户或您的网站没有任何值以避免此错误尝试在Global.ascx中添加以下内容:

 void Application_Error(object sender, EventArgs e) { if (ex is HttpException && ex.InnerException is ViewStateException) { Response.Redirect(Request.Url.AbsoluteUri); return; } } 

有关更多信息,请查看以下链接:

https://www.karpach.com/viewstateexception-invalid-viewstate.htm