2009-10-16 3 views
3

C# 모바일 사이트가있어서 일부 모바일 클라이언트에 문제가 있습니다. 아래에 추적을 게시했지만 기본적으로 인터넷 URL에 연결된 전화 또는 wap 게이트웨이의 브라우저는 양식의 viewstate 숨겨진 입력을 인코딩합니다.asp.net Base-64 문자열의 문자가 잘못되었습니다.

은/wEPDwULLTExNTMyOTcwOTBkGAEFBlBtTGlzdA9nZA ==

너무 viewstate가 실패

퍼센트 2FwEPDwULLTExNTMyOTcwOTBkGAEFBlBtTGlzdA9nZA % 차원을 3D %가된다.

처리하기 전에 viewstate 정보를 재정의하고 urldecode 할 수 있습니까?

 
System.Web.HttpException: The state information is invalid for this page and might be corrupted. ---> System.Web.UI.ViewStateException: Invalid viewstate. 
Client IP: 65.91.116.34 
Port: 37172 
User-Agent: SCH-R430 UP.Browser/6.2.3.8 (GUI) MMP/2.0 
ViewState: %2FwEPDwULLTExNTMyOTcwOTBkGAEFBlBtTGlzdA9nZA%3D%3D 
Referer: 
Path: /mobile/Inbox.aspx ---> System.FormatException: Invalid character in a Base-64 string. 
    at System.Convert.FromBase64String(String s) 
    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() 
    --- End of inner exception stack trace --- 
    --- End of inner exception stack trace --- 
    at System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError) 
    at System.Web.UI.ViewStateException.ThrowViewStateError(Exception inner, String persistedState) 
    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.mobile_inbox_aspx.ProcessRequest(HttpContext context) 
    at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 
+0

(삭제 내 대답 나는 발견하지 않았다로 "viewstate가"비트) 당신은 질문이 묻는 프로그래밍 언어의 *하지 * 프로그래밍 언어를 코드를 제공해야 –

답변

3

이 문제를 처리하는 사용자 지정 ViewStatePersister 개체를 구현할 수 있습니다. HiddenFieldPageStatePersister에서 파생되기를 원할 것입니다. ViewState 상단에 압축을 구현하는 방법을 보여주는 this article을 살펴보면서 수행해야 할 작업과 매우 유사합니다.

참여 hackiness 약간이있다 : 당신의 MSDN docs 가상으로 표시되지 때문에 반사없이 재정의 할 수없는, 말에 위배되는 StateFormatter 기본 클래스의 필드를 설정하는 반사를 사용해야합니다 .

-1

아래의 솔루션을 사용하고 작동하는지 확인하십시오. 그것은 나를 위해 작동합니다. 문제를 일으키는 asp.net 코드에서이 코드를 추가하십시오. 코드는 vb.net에 아래

Protected Overrides Function LoadPageStateFromPersistenceMedium() As Object 
     Return Session("_ViewState") 
    End Function 
Protected Overrides Sub SavePageStateToPersistenceMedium(viewState As Object) 
     Session("_ViewState") = viewState 
    End Sub 
+0

너의 선택. – cybermonkey

관련 문제