2 回答
TA贡献1789条经验 获得超10个赞
首先,您不需要Page_Init使用动态控件。Page_Load很好。但是为了填充中继器,您可以在 UserControl 中创建一个属性
public partial class WebUserControl1 : System.Web.UI.UserControl
{
public Repeater _ARepeater
{
get
{
return ARepeater;
}
set
{
ARepeater = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
}
然后,您可以使用 UserControl 从页面访问它。
protected void Page_Load(object sender, EventArgs e)
{
var list = (WebUserControl1)LoadControl("~/WebUserControl1.ascx");
list.ID = "MyUserControl";
Panel1.Controls.Add(list);
list._ARepeater.DataSource = source;
list._ARepeater.DataBind();
}
或使用 FindControl
var _ARepeater = (Repeater)Panel1.FindControl("MyUserControl").FindControl("ARepeater");
_ARepeater.DataSource = dt;
_ARepeater.DataBind();
TA贡献1848条经验 获得超6个赞
您可能不喜欢这个答案,但是Page.LoadControl
允许指定控件类型和添加构造函数参数的重载不会将 绑定ascx
到代码隐藏,并且所有关联的子控件最终都将为空。
过去,我通过在构建用户控件后添加另一种设置依赖项的方法来解决此问题,但这不是一个理想的解决方案。
那就是说你没有做错任何事。如果您使用 Binding 将正常工作Page.LoadControl("~/path/to/mycontrol.ascx")
,但您不会有构造函数注入。
我认为问题在于支持类实际上与前端页面没有关系,除非通过将其指定为代码隐藏类的页面指令。没有什么能阻止多个不同的前端使用相同的类作为它的代码隐藏,因此加载通过Type
使得很难或完全不可能确定正确ascx
的绑定是什么。
- 2 回答
- 0 关注
- 76 浏览
添加回答
举报