C# ASP.NET向导控件,如何动态添加步骤?

C# ASP.NET向导控件,如何动态添加步骤?,c#,asp.net,c#-4.0,wizard,C#,Asp.net,C# 4.0,Wizard,代码隐藏: public partial class WebForm1 : System.Web.UI.Page { protected override void OnInit(EventArgs e) { var t = new TemplatedWizardStep { Title = "Lalalal" }; t.Controls.Add(new Step1UserControl()); _WizardWebControl.

代码隐藏:

public partial class WebForm1 : System.Web.UI.Page
{
    protected override void OnInit(EventArgs e)
    {
        var t = new TemplatedWizardStep { Title = "Lalalal" };
        t.Controls.Add(new Step1UserControl());
        _WizardWebControl.WizardSteps.Add(t);
        base.OnInit(e);
    }
}
页面标记:

<asp:Wizard runat="server" id="_WizardWebControl">

步骤1UserControl.ascx标记:

<fieldset>
    <legend>General Informations</legend>
     <p>TEST DYNAMIC</p>    
</fieldset>

一般资料
动态测试


步骤显示在标题的左侧栏中,但HTML(字段集和段落)不显示在步骤中。它也需要是TemplatedWizardStep,因为我们在布局中使用模板。如何动态添加步骤?

我不确定这种方法是否是最佳做法,但它确实有效:

Step1UserControl应实现ITemplate接口

public void InstantiateIn(Control container)
{
    container.Controls.Add(this);
}
然后onInit可能看起来像这样:

protected override void OnInit(EventArgs e)
{
    TemplatedWizardStep templatedWizardStep =  new TemplatedWizardStep { Title = "Lalalal" };

    //  load control by path to initialize markup
    ITemplate control = (ITemplate)Page.LoadControl("\\Step1UserControl.ascx");                        
    
    templatedWizardStep.ContentTemplate = control;            
    wizard.WizardSteps.Add(templatedWizardStep);
    
    //  make it visible
    wizard.MoveTo(templatedWizardStep);
    base.OnInit(e);   
}