C# 如何更改CreateUserWizard控件的布局?

C# 如何更改CreateUserWizard控件的布局?,c#,asp.net,asp.net-membership,asp.net-4.0,C#,Asp.net,Asp.net Membership,Asp.net 4.0,如何以编程方式更改CreateUserWizard控件的布局(模板)?我想定义另一个布局(不使用hord表),但继续使用所有事件处理和CreateUserWizard控件用户的创建。 仅供参考,以下代码不起作用,并产生了一个完全不代表我的模板的意外结果。未调用ITemplate的“InstanceIn”方法 public partial class b : System.Web.UI.Page { protected void Page_Init(object sende

如何以编程方式更改CreateUserWizard控件的布局(模板)?我想定义另一个布局(不使用hord表),但继续使用所有事件处理和CreateUserWizard控件用户的创建。 仅供参考,以下代码不起作用,并产生了一个完全不代表我的模板的意外结果。未调用ITemplate的“InstanceIn”方法

public partial class b : System.Web.UI.Page
    {
        protected void Page_Init(object sender, EventArgs e)
        {
            CreateUserWizard createUserWizard = new CreateUserWizard();
            createUserWizard.CreateUserStep.ContentTemplate = new Template();
            Panel1.Controls.Add(createUserWizard);
        }
    }

    public class Template : ITemplate
    {
        void ITemplate.InstantiateIn(Control container)
        {
            container.Controls.Add(new TextBox() { ID = "UserName" });
            container.Controls.Add(new TextBox() { ID = "Password" });
            container.Controls.Add(new TextBox() { ID = "ConfirmPassword" });
            container.Controls.Add(new TextBox() { ID = "Email" });
            container.Controls.Add(new PlaceHolder() { ID = "ErrorMessage" });
        }
    }
}

我不知道为什么会这样,但它确实:

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Init(object sender, EventArgs e)
    {
        CreateUserWizard createUserWizard = new CreateUserWizard();

        /* Difference Starts Here */
        CreateUserWizardStep createUserWizardStep = new CreateUserWizardStep();
        createUserWizardStep.ContentTemplate = new Template();
        createUserWizard.WizardSteps.Add(createUserWizardStep);
        /* End Difference */

        Panel1.Controls.Add(createUserWizard);
    }
}

public class Template : ITemplate
{
    void ITemplate.InstantiateIn(Control container)
    {
        container.Controls.Add(new TextBox() { ID = "UserName" });
        container.Controls.Add(new TextBox() { ID = "Password" });
        container.Controls.Add(new TextBox() { ID = "Question" });
        container.Controls.Add(new TextBox() { ID = "Answer" });
        container.Controls.Add(new TextBox() { ID = "ConfirmPassword" });
        container.Controls.Add(new TextBox() { ID = "Email" });
        container.Controls.Add(new PlaceHolder() { ID = "ErrorMessage" });
    }
}

我所做的是将CreateUserWizard控件添加到页面,添加了一个空白的ContentTemplate,并按照的说明对ASP.NET代码生成器的功能进行反向工程。

添加它的原因是编程还是仅仅为了摆脱表格格式?您可以根据需要自定义标记中的布局。对于4.0,asp.net不再将其呈现为表。@gbs:谢谢您的建议,但没有标记,因为控件将在预编译的dll中结束。此外,我不仅仅是试图摆脱表,而是通过编程从解析的XML文件构建ContentTemplate。因此,布局将是高度可变的。我对登录控件使用了类似的方法,效果非常好。但是登录控件调用ITemplate的InstanceIn方法,而CreateUserWizard没有。谢谢你的建议Greg,但我相信我尝试了类似的方法,它给出了一个错误,即CreateUserWizard只能有一个CreateUserWizardStep。此外,CreateUserWizard.CreateUserStep是只读的,因此您无法创建新的并替换当前的。最坏的情况是,您可以对生成的代码执行相同的步骤,以了解asp.net是如何使其工作的。我将查看“调试生成的asp.net代码”一文。谢谢你的链接。我按照你的建议和提示设法让它工作。所以你的答案是正确的。我想迟做总比不做强!:)