2013-03-08 2 views
1

asp.net 페이지와 사용자 컨트롤 사이의 데이터 테이블은주 내가, 내가 그들 사이에 데이터 테이블을 공유하는 사용자 컨트롤을 동적으로로드하는 ASP.Net 페이지 싶으

나는

을 다음과 같은 세션 상태를 사용했습니다
HttpContext.Current.Session["DataTable"] = DT; 

은 상기 데이터가 성공적으로로드되어 사용자 제어

gridVw.DataSource =(DataTable) HttpContext.Current.Session["DataTable"] ; 
gridVw.DataBind(); 

에서 아래로 액세스되지만 문제는 잘못된 뷰 STA의 오류를 서버 측에서 임의의 이벤트에 액세스 또는 포스트 백 상태에서 소리지르는 포스트 백

여기

상태 정보는이 페이지에 대한 무효이며 수있는 오류 페이지 동안

는 또한 페이지에서 세션에 액세스

같은 문제를 가 발생 (만 IE에서) 발생 타락하다. FormatException : 입력이 유효한 Base-64 문자열이 아니기 때문에 에 기본이 아닌 64 자, 2 자 이상의 패딩 문자 또는 패딩 문자 사이에 잘못된 문자 이 들어 있습니다. ]
System.Convert.FromBase64_ComputeResultLength (CHAR * inputPtr, INT32 inputLength) 10,545,429 System.Convert.FromBase64CharPtr (CHAR * inputPtr, INT32 inputLength) +71
System.Convert.FromBase64String (문자열들) +41
System.Web.UI.ObjectStateFormatter.Deserialize (문자열 inputString, 목적 목적) +66
System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter2.Deserialize (문자열 serializedState, 목적 목적) +8
System.Web.UI.Util.DeserializeWithAssert (IStateFormatter2 형식 지정자, String serializedState, 용도 코드) +40
System.Web.UI.HiddenFieldPageStatePersister.Load() +127

[ViewStateException : 잘못된 viewstate입니다.

나는 세션이 내가 다른 세션 변수 (더미 번호)를 사용했습니다

System.Convert.FromBase64 원인이 긴 데이터 또는 제로 분리 문자 또는 어떤 이유가 있기 때문에 생각 그리고 사용자 컨트롤에서이 사용자 컨트롤에 문제가없고 아무런 문제가 없다는 것을 확인하기 위해 액세스했습니다.

질문은 제가 세션을 사용하고 싶지 않습니다. atatable, 나는 그 단점을 알고 있지만 거기에 다른 제안이 있습니까? : 나는 정적 메소드 (WebMethod)에서 웹 페이지에서 사용자 정의 컨트롤을로드하고있어이 가능한 해결 방법 당신은 정말 그나마 전혀 세션 변수를 사용할 필요가

+0

이 현실을 분석 할, 즉 세션 상태에서 한 번에 전체 데이터 테이블을 저장 오히려 가치가 기록에 대한 데이터베이스를 호출하지 그것에서 해당 레코드를 검색 할 수 있습니다. ,, 나는 세션을 사용하지 않도록 데이터베이스에서 원하는 레코드를 가져올 수 있습니까? – user690069

+0

WebMethod에서 UserControl을 동적으로로드하는 방법은 무엇입니까? 페이지에 어떻게 추가됩니까? ViewStateException은 세션에 저장하는 것과 관련되어서는 안되며 __VIEWSTATE 필드에 서버에 게시 된 것으로부터 가져와야하며 변경되지 않은 경우 이전에 뷰 상태에 저장된 내용을 기반으로합니다. 요청을 페이지에 보냅니다. – alhalama

답변

0

일에서 저를 방지 할 수 있습니다. 사용자 정의 컨트롤의 공용 함수 (또는 속성)를 웹 응용 프로그램에 표시하면 컨트롤에 테이블을 할당 할 수 있습니다.예 :

Partial Class user_controls_myControl 
    Inherits System.Web.UI.UserControl 
    'create a public method your app can see: 

    Public Sub bindData(ByVal dt As dataTable) 
    End Sub 

End Class 

당신은 다음과 같은 기본 응용 프로그램에서 액세스 할 수 있습니다

dim mydataTable as dataTable 
'fill the datatable 
dim myControl as myControl1 
myControl.bindData(mydataTable) 
+0

고마워요 4U 답변, 나도 알아하지만 문제는 내가 그 순간에 datatable을 가지고 있지 않습니다 그래서 검색 후 나는 더 많은 사용을위한 세션에 보관 .. 내 게시물에 문제가 또한 액세스하고 있다고 말했다 웹 페이지 자체의 세션 – user690069