2012-08-03 3 views
1

다음과 같이 간단히 설명 드리겠습니다.이 점을 높이 평가하고 많은 예제와 솔루션을 찾았으나 여전히 파악할 수 없습니다. 파일 뒤에 .aspx.cs 코드에서 프로그래밍 방식으로 작성된 사용자 정의 컨트롤에 매개 변수 전달

, 나는 다음과 같은 한 :

NewsArticleList listall = NewsArticleManager.GetListAll(); 
foreach (NewsArticle x in listall) 
{ 
    Control c1 = (NewsArticleContainer)LoadControl("~/UserControls/NewsArticleContainer.ascx"); 
    ((NewsArticleContainer)c1).PopulateWithNewsArticle(x); 
    mynewspanel.Controls.Add(c1); 
} 

나는 PopulateWithNewsArticle (라는 사용자 정의 컨트롤의 메소드가) 사용자 정의 컨트롤의 NewsArticle을 받아들이고, 채우는 이에 따라 웹 컨트롤 :

public void PopulateWithNewsArticles(NewsArticle x) 
{ 
    lbltitle.Text = x.Title; 
    lblcategory.Text = x.Category; 
    //...etc. 
} 

이제는 정상적으로 작동합니다. 하지만 내가 배우고/이해하고 싶은 것은 사용자 컨트롤 생성시 사용자 컨트롤의 Page_Load에 NewsArticle을 풀 수 있도록 LoadControl()을 사용할 때 NewsArticle x를 사용자 정의 컨트롤로 전달할 수있는 방법입니다. PopulateWithNewsArticle 메서드로 인스턴스화 한 후 사용자 컨트롤을 인스턴스화 할 때 웹 컨트롤 속성을 오른쪽에서부터 가져옵니다 (지금 가지고있는 것처럼).

답변

2

우리

당신은 NewsArticleContainer.ascx 공공 재산 NewsArticle에 노출 될 수 있습니다. 다음 질문은 오버로드 된 LoadControl()을 통해 매개 변수를 전달한 후 사용자 정의 컨트롤의 생성자에서 다른 매개 변수를 수신하고 언 패킹 할 수 있습니까? 생성자에 대해 이러한 매개 변수를 사용하는 것만을 "알 수 있습니까?"
2

이 하나가 Page.LoadControl()의 오버로드

Control c1 = 
(NewsArticleContainer)LoadControl(typeof(NewsArticleContainer),new object[]{ x }); 

사용할 수 있습니다, 그것은 그 후이 구문

public Control LoadControl(
    Type t, 
    Object[] parameters 
) 

을 가지고 당신은 수, 너무 당신의 UserControl에 대한 유효한 생성자를 만들어야 할 것 이럴 수다

class NewsArticleContainer:System.Web.UI.UserControl 
{ 
    public NewsArticleContainer(NewsArticle x) 
    { 
     // Some cool code stuff here 
    } 
} 

go here.

var control = (NewsArticleContainer)LoadControl("~/UserControls/NewsArticleContainer.ascx"); 
control.NewsArticle = x; 
+0

+1 나는 LoadControl이 끝내 오버로드 된 생성자 –

+0

, 덕분에 많이 걸릴 수 몰랐 :이 같은 초기화 코드를 가지게됩니다 – CptSupermrkt

+0

사실 과부하가 다른 매개 변수를 사용하는 것처럼 보입니다. 객체 배열을 사용하려면 경로에 문자열을 지정할 수는 없지만 유형을 지정해야합니다. – CptSupermrkt

관련 문제