2011-04-06 5 views
1

제목에 따라 사용자 지정 컨트롤을 만들었습니다.동적 컨트롤 유지 방법 (C#)

특정 버튼 클릭 이벤트에서이 컨트롤이 인스턴스화 된 다음 페이지에 추가됩니다.

동적 컨트롤이며 자체 버튼 이벤트가 있습니다. 이 버튼 이벤트 위해서는

은 컨트롤이 후속를 Page_Load/온로드 라이프 사이클 단계에서, Page_Load/OnLoad 말까지 그려야합니다 트리거합니다.

내 컨트롤은 어떻게 유지합니까? 직렬화 할 수없는 항목이 포함되어 있기 때문에 Session 개체에 저장할 수 없습니다.

+1

왜 당신이 컨트롤을 유지해야

protected override void CreateChildControls() { base.CreateChildControls(); if (ViewState["AddControl"] == true) { Controls.Add(new MyControl() {Id = "someId" }); } } 

그리고 BTN 핸들러? 이것은 잘못된 접근 방식처럼 들리지만, 동적으로 추가 된 컨트롤을 각 페이지 요청으로 다시 작성해야합니다. – Tejs

답변

2

을을 CreateChildControls 처리에 읽어하실 수 있습니다. 가장 좋은 방법은 방법 CreateChildControls입니다.

클릭 핸들러에서 일부 버튼 (영구 플래그 - viewstate 또는 sessionstate에 있어야하므로)을 클릭하면 동적으로 컨트롤을 추가하려면 - 다음 페이지를 만들 때 컨트롤을 추가해야 함을 나타내야합니다. 이 후 설정해야 ChildControlsCreated = false;
이 CreateChildControls가 다시 실행되고 컨트롤이 올바르게 만들어지며 (플래그를 지우지 않을 때까지) 지속됩니다.

는 그래서이 방법으로 수행해야합니다 :

private void OnShowControlClick(object sender, EventArgs e) 
{ 
     ViewState["AddControl"] = true; 
     ChildControlsCreated = false; 
} 
0

나는 당신이해야 할 일은 사전 초기화 과정에서 동일한 ID로 다시 만들고 asp.net 엔진이 뷰 상태에서 그것을 채울 것이라고 믿는다.

이것은 내 머리 꼭대기에 없기 때문에 조금 자세히 설명 할 수 있습니다.

3

일반적으로 동적 컨트롤의 경우 모든 포스트 백마다 이벤트를 추가해야하며 매번 이벤트를 유선으로 처리해야합니다.

0

모든 HTML 페이지와 마찬가지로 컨트롤은 각 페이지 요청시 다시 만들어야합니다. ASP.NET은 ViewState 및 Session과 같은 메커니즘을 사용하여 많은 것을 처리합니다.

컨트롤이 ViewState에 의해 추적되지 않거나 추적 할 수없는 경우 직접 처리해야합니다.

내가 얼마나 복잡한 컨트롤은 모르겠지만, 출발점으로 당신은 당신은 모든 게시에 동적 컨트롤을 다시해야 이벤트 here (MSDN)