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,并设置实例化用户控件时从右侧开始的 Web 控件属性,而不是在使用 PopulateWithNewsArticle 方法实例化之后执行它(就像我现在拥有它一样)。

4

2 回答 2

2

NewsArticle 您可以在 中公开公共属性NewsArticleContainer.ascx,因此您将拥有如下初始化代码:

var control = (NewsArticleContainer)LoadControl("~/UserControls/NewsArticleContainer.ascx");
control.NewsArticle = x;
于 2012-08-03T06:16:17.643 回答
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 回答