2008-11-10 3 views
3

Ajax를 사용하여 usercontrols를로드하는 것이 가장 좋습니다.Ajax를 사용하여 사용자 정의 컨트롤로드

첫 번째 방법은 단순히 UpdatePanel을 사용하고 아약스 포스트 백에서 LoadControl()으로 popuplating하지만 동일한 UpdatePanel에로드 된 다른 사용자 컨트롤을 다시 렌더링하는 것입니다. 또한 내가로드해야 UserControls의 수가 다를 수 있기 때문에 나는 미리 정의 된 UpdatePanels 집합을 가질 수 없습니다.

이 시나리오 유형에 대한 모범 사례가 있습니까?

프레임 워크 나 솔루션이 될 사용자 정의 컨트롤의 일부 유형을 구현할 수 있지만 가능한 경우 ASP.NET 3.5 및 AjaxControlToolkit을 사용하여이 작업을 수행하고 싶습니다.

답변

8

아마도 이런 식으로하지 않는 것만으로도 페이지를 활성화하고, 사용자 정의 컨트롤을 추가 한 다음 결과 HTML을 실행하고 덤프하면 어디서나 작동 할 수 있습니다 (내 단순한보기에서) 클라이언트에서 jQuery를 사용하여 & 난 그냥 그것을 언급 할 필요가 재미 ...

그냥 약자에 대한 라벨, 일반 오래된 범위 또는 방법을 사용 UpdatePanels 건너 뛰기 ...

-numbingly 빠른 측면 :

$('#SomeContainer').Load("default.aspx?What=GimmeSomeSweetAjax"); 

서버 쪽은 : 다른

if(Request.QueryString["What"]==GimmeSomeSweetAjax) 
{ 
    Page page = new Page(); 
    Control control = (Control)LoadControl("~/.../someUC.ascx"); 
    StringWriter sw = new StringWriter(); 
    page.Controls.Add(control); 
    Server.Execute(page, sw, false); 
    Response.Write(sw.ToString()); 
    Response.Flush(); 
    Response.Close(); 
} 

아무것도 실행하지 않고, 페이지의 라이프 사이클 진짜 케 보르 키안 순간 ;-)

+1

아주 기본적인 솔루션이지만 작동합니다. 감사합니다! :-) – user19264

+1

당신은 'Server.Execute'접근법과 InnerHtml을 통해 삽입하는 것은 ajax 컨트롤을 가진 usercontrols를 위해 작동하지 않는다는 것을 알아야합니다. 스크립트 태그는 InnerHtml을 통해 삽입 될 때 DOM에서 실행되지 않습니다. 좋아. 직접 시도하고 updatePanels로 이동 ... –

2

확실하지 않지만 아마도 this tutorial by Scott Guthrie이 유용 할 수 있습니다.

+0

위대한 링크 - 고마워. 나는 항상이 일을하는 법을 알고 싶었지만, 실제로 노력하는 데는 충분한 이유가 없었습니다. 앞으로 필요할 경우, 지금은 도움이됩니다. –

1

이 속성이 작동 얻기 위해에 이것을 사용했다있다!

 var page = new Page(); 
     var sw = new StringWriter(); 
     var control = (UserControl)page.LoadControl("~/.../someUC.ascx"); 

     var type = control.GetType(); 
     type.GetProperty("Prop1").SetValue(control, value, null); 
     page.Controls.Add(control); 

     context.Server.Execute(page, sw, false); 
     context.Response.ContentType = "text/html"; 
     context.Response.Write(sw.ToString()); 
     context.Response.Flush(); 
     context.Response.Close(); 
관련 문제