2012-08-03 5 views
1

나는 UserControl입니다. 동적으로 컨트롤 (SPGridView에 대한 열. 격자 컨트롤이 ObjectDataSource, ButtonLabel)을 CreateChildControl 메서드에 추가하고 Controls 컬렉션에 추가합니다. viewstate가이 입니다동적으로 컨트롤을 추가 할 때 오류가 발생했습니다.

"viewstate가를로드하지 못했습니다 제어 트리되는 :. 이러한 컨트롤의 두 잘 (ButtonLabel) 포스트 백에 있지만 (MenuTemplate)의 하나의 내용으로 예외를 발생 추가 예를 들어 컨트롤을 동적으로 추가하는 경우 포스트 백 중에 추가 된 컨트롤은 과 일치해야합니다. 컨트롤의 유형과 위치는 초기에 추가되었습니다. 요청. "

코드를 OnInit 메서드로 이동하면 모든 컨트롤이 성공적으로 추가됩니다. 그래서, 질문이 있습니다 : 누군가가 왜 어떤 컨트롤이 Controls 컬렉션에 성공적으로 추가되었고 다른 것들은 포스트 백에서 CreateChildControls에 실패했는지 설명 할 수 있습니까? ViewState here에 대해 읽었습니다. 아마도 나는 어떤 순간을 이해하지 못했을 것입니다. 나 한테

봐 코드 :

나는 그것이 다시 게시에 유지 될 수 있도록, 당신은 단지 (후 Page_Init 후, IE)를 Page_Load 또는 다른 이벤트에서 템플릿에 항목을 추가 할 수 있습니다 생각
protected override void CreateChildControls() 
{ 

Label l = new Label(); 
l.ID = "labelTest"; 
l.Text = "Hello test!"; 

Button b = new Button(); 
b.Text = "Press test"; 
b.ID = "buttonTest"; 
b.Click += b_Click; 

Controls.Add(l); 
Controls.Add(b); 

ObjectDataSource gridDataSource = new ObjectDataSource(); 
gridDataSource.ID = "gridDataSource"; 
gridDataSource.SelectMethod = "GetDataSource"; 
gridDataSource.TypeName = this.GetType().AssemblyQualifiedName; 

Controls.Add(gridDataSource); 

SPMenuField colMenu = new SPMenuField(); 
colMenu.HeaderText = "Test"; 
colMenu.TextFields = "Test"; 
colMenu.MenuTemplateId = "ListMenu"; 

// it is my SPGridView that added in markup 
customGridView.Columns.Add(colMenu); 

MenuTemplate titleListMenu = new MenuTemplate(); 
titleListMenu.ID = "ListMenu"; 

// The exception occurs here 
Controls.Add(titleListMenu); 

base.CreateChildControls(); 
} 
+0

페이지 수명주기를 알고 싶습니다. Page_Load에 추가 된 컨트롤에는 viewstate가 없습니다. Viewstate는 이것보다 먼저 빌드됩니다. – Ankit

+0

컨트롤에 Page_Load의 viewstate가 있다고 생각합니다. [이 설명] (http://msdn.microsoft.com/ru-ru/library/ms972976.aspx#viewstate_topic3), 그림 4. 이벤트 및 뷰 상태 – andDaviD

답변

0

아닌 템플릿 템플릿은 Page_Init 단계 전에 또는 앞에 만들어야합니다. 그렇지 않으면 viewstate에서 템플릿에 컨트롤을로드하지 않거나 오류가 발생할 수 있습니다.

관련 문제