나는 UserControl
입니다. 동적으로 컨트롤 (SPGridView
에 대한 열. 격자 컨트롤이 ObjectDataSource
, Button
및 Label
)을 CreateChildControl
메서드에 추가하고 Controls
컬렉션에 추가합니다. viewstate가이 입니다동적으로 컨트롤을 추가 할 때 오류가 발생했습니다.
"viewstate가를로드하지 못했습니다 제어 트리되는 :. 이러한 컨트롤의 두 잘 (
Button
및Label
) 포스트 백에 있지만 (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();
}
페이지 수명주기를 알고 싶습니다. Page_Load에 추가 된 컨트롤에는 viewstate가 없습니다. Viewstate는 이것보다 먼저 빌드됩니다. – Ankit
컨트롤에 Page_Load의 viewstate가 있다고 생각합니다. [이 설명] (http://msdn.microsoft.com/ru-ru/library/ms972976.aspx#viewstate_topic3), 그림 4. 이벤트 및 뷰 상태 – andDaviD