ASP.NET Wizard控件,如何动态添加步骤?

发布于 2024-09-28 08:49:38 字数 726 浏览 4 评论 0原文

代码隐藏:

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">

Step1UserControl.ascx 标记:

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

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

Code-behind:

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);
    }
}

Page markup:

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

Step1UserControl.ascx markup:

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

The step show at the left bar with the Title, but the HTML (fieldset and the paragraph) is not displayed in the step. It requires to be a TemplatedWizardStep too because we use Template for the layout. How do I add a Step dynamically?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

厌倦 2024-10-05 08:49:38

我不确定这种方式是最佳实践,但它有效:

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);   
}

I'm not sure that this way is the best practice, but it works:

Step1UserControl should implement ITemplate interface,

public void InstantiateIn(Control container)
{
    container.Controls.Add(this);
}

and then onInit may look like this:

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);   
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文