以下代码不会向aspx占位符添加控件:
var control = new ASCXControl { ID="searchFilters", Filters = filters };
var placeholder = Utility.FindControlRecursive(Page, "rightColumnSearchFilters") as PlaceHolder;
if(placeholder != null){
placeholder.Controls.Add(control);
placeholder.Visible = true;
}
调试时,找到占位符,控件显示在进入块后添加到占位符控件集合中,但是我在页面上的占位符中看不到任何渲染。
我目前需要将变量传递给控件才能找到我需要显示的过滤器。虽然我不喜欢在控件之间传递变量,但我没有看到任何其他方式。
我错过了什么会使控件无法渲染?有更好的方法吗?
编辑:
我正在尝试将ascx中的HTML放到渲染中。我能够在控件上的Page_Load中获取Filters参数。
答案 0 :(得分:4)
这可能是也可能不是整个问题,但通常试图以UserControl
方式实例化它会导致问题。您应该使用LoadControl(path)
类的Page
方法:
ASCXControl ctl = (ASCXControl) LoadControl("path");
我不是百分百肯定,但我认为如果你只是像普通的类/控件一样实例化它,你最终不会运行你通常会遇到的所有事件处理程序(例如Load
)。