环境: .Net Framework3.5,VS2008.本问题涉及如下几个类:
1, UserControl的基类: BaseControl.cs
2, 4个UserControl: Daily.ascx/Daily.ascx.cs,为了方便,其他的3个就不列举了.
3, 页面.我要实现的功能,类似模板模式.
即:我在BaseControl中定义一个虚方法或抽象方法,然后在BaseControl的某个生命期调用此方法,此方法到子类中实现.
例如://-------- 父控件 -----------
public abstract class BaseControl : System.Web.UI.UserControl
{
    protected override void Render(System.Web.UI.HtmlTextWriter writer)
    {
        //调用抽象方法(并不是希望BaseControl调用方法,而是为了让子类只管实现方法,而不用涉及调用)
        this.AddDdlSelectSetting();
        base.Render(writer);
    }
    //定义一个抽象方法
    protected abstract void AddDdlSelectSetting();
}//-------- 子控件 -----------
public partial class SettingWeekly : BaseControl
{
    public SettingWeekly()
        : base()
    {
    }
    protected override void AddDdlSelectSetting()
    {
        //divSelect是一个runat="server"的div
        divSelect.Controls.Add(this.ddlSelectSetting);
    }
}//----- 在页面中,使用了两种方法加载  -------
1
SettingWeekly control = new SettingWeekly();
this.Controls.Add(control);2
SettingWeekly control = new SettingWeekly();
this.Controls.Add(Page.LoadControl(control.GetType(), null));
现在的问题是,子类AddDdlSelectSetting()方法中,divSelect是null(红色的部分).
我就很郁闷~但是,如果我直接把控件拖进页面,就不会出问题,divSelect就不是null.即:
<%@ Register src="SettingWeekly.ascx" tagname="SettingWeekly" tagprefix="uc" %>
<uc:SettingWeeklyID="SettingWeekly1" runat="server" />首先,请高手们解释一下,Controls.Add(....) 和 <%@ Register.......>有什么区别?为什么造成这个现象?
然后是,我必须要动态的加载用户控件,不可能直接拖到页面上,我应该怎么处理?大家帮帮忙吧~谢谢了!