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を受け入れ、それに応じてユーザーコントロールのWebコントロールにデータを入力します。

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

これで動作します。これで問題ありません。しかし、私が学び/理解したいのは、LoadControl()時にNewsArticle xをユーザーコントロールに渡す方法です。これにより、ユーザーコントロールの作成時に、ユーザーコントロールのPage_LoadでNewsArticleを解凍し、設定できます。 PopulateWithNewsArticleメソッドを使用してインスタンス化した後に実行するのではなく、ユーザーコントロールがインスタンス化されたときのWebコントロールのプロパティ(現在のように)。

4

2 に答える 2

2

あなたが使うことができます

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

これはオーバーロードPage.LoadControl()されています、これはこの構文を持っています

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

その後、UserControlの有効なコンストラクターも作成する必要があります。これは、次のようになります。

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

詳細については、こちらをご覧ください

于 2012-08-03T06:05:37.450 に答える
2

NewsArticle でパブリックプロパティを公開できるNewsArticleContainer.ascxので、次のような初期化コードがあります。

var control = (NewsArticleContainer)LoadControl("~/UserControls/NewsArticleContainer.ascx");
control.NewsArticle = x;
于 2012-08-03T06:16:17.643 に答える