让我先说一下:我为此搜索了高低,并找到了许多示例和解决方案,我仍然无法解决这个问题。
在.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方法实例化之后执行它(就像我现在一样)。
答案 0 :(得分: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
}
}
有关此go here的更多信息。
答案 1 :(得分:2)
我们可以在NewsArticle
中公开公共属性NewsArticleContainer.ascx
,因此您将拥有如下的初始化代码:
var control = (NewsArticleContainer)LoadControl("~/UserControls/NewsArticleContainer.ascx");
control.NewsArticle = x;