2009-05-08 6 views
10

C#을 사용하여 ascx 컨트롤을로드하고 "렌더링"할 수있는 방법이 있습니까?C# 코드를 사용하여 ascx 구성 요소로드

기본적으로 인라인 ASP를 동일한 HTML을 반환하는 C# 함수로 대체하려고합니다. 이렇게하면 원래의 HTML을 생성 한 동일한 코드를 사용하여 jQuery로 페이지의 해당 섹션을 업데이트 할 수 있도록 webmethod로 설정할 수 있습니다.

정말이 작업을 수행하는 방법이 필요하며 이는 논리적 인 경로처럼 보입니다.

답변

17

당신은 당신이 컨트롤을 렌더링하는 페이지를 작성해야합니다. (This article에는 일부 코드를 빌린 관련 정보가 있습니다.)

1

나는이 시도하지했지만, 당신이 LoadControl 기능을 사용하여 컨트롤을로드 할 수

Control Example = LoadControl("~\\Controls\\MyControl.ascx"); 

는 그런 다음 컨트롤을 렌더링을 시도 할 수 :

StringWriter sw = new StringWriter(); 
HtmlTextWriter htw = new HtmlTextWriter(sw); 
Example.RenderControl(htw); 
Response.Write(sw.ToString()); 
Response.End(); 

을하지만, 있는지 확인하면 재정의 VerifyRenderingInServerForm 및 페이지에서 EnableEventValidation을 false로 전환하십시오.

위의 내용을 잊어 버리십시오. 나는 돌아가서 테스트를했는데 webmethod가 정적이기 때문에 LoadControl을 호출 할 수 없다. 정적이기 때문에 호출 할 Page 객체가 없습니다. 즉, 사용자 컨트롤을 동적으로로드하지 않습니다.

+1

당신은 실제로 대부분 맞다. MyUsercontrol uc = (MyUserControl) Page.LoadControl ("/ path/to/MyUserControl.ascx"); 그럼 당신은 할 수 SomeItem.Controls.Add (uc); 또는 컨트롤을 문자열로 렌더링 한 다음 jQuery를 사용하여 dom 항목을 프로그래밍 방식으로 추가하면됩니다. – Serapth

+0

실제로 컨트롤을 추가하는 것이이 경우 옵션이 될 것이라고 생각하지 않습니다. 전체 포스트 백 (페이지 객체 또는 컨트롤을 추가 할 객체가 없음), jQuery에서 호출하는 등. 그러나 Keltex의 접근 방식이 효과적입니다. – JaCraig

1

Explanation에는 찾고있는 답변이 있어야합니다. 기본적으로 코드 비헤이비어에서 페이지의 컨트롤을 선언 한 다음 LoadControl을 선언해야합니다. 그 자체로 사용자 컨트롤이 렌더링되지 않습니다

public static string RenderUserControl(string path) 
{ 
    Page pageHolder = new Page(); 
    Control viewControl = pageHolder.LoadControl(path); 

    pageHolder.Controls.Add(viewControl); 
    using(StringWriter output = new StringWriter()) 
    { 
     HttpContext.Current.Server.Execute(pageHolder, output, false); 
     return output.ToString(); 
    } 
} 

:

1

중첩 된 사용자 정의 컨트롤로 작업 한 이후 Keltex의 답변이 저에게 효과적이었습니다. 당신은 사용자 정의 컨트롤에 매개 변수를 전달하고 싶을 경우 또한, 당신은에 의해 수행 할 수 있습니다 :

_MyNameSpace_MyUserControl viewcontrol = (_MyNameSpace_MyUserControl) pageHolder.LoadControl(path); 

viewcontrol.MyParam = "My value"; 
0

매우 간단한 사용하기 :

yourItem.Controls.Add(LoadControl("~/user control File path")); 
관련 문제