C# 如何更改CreateUserWizard控件的布局?
如何以编程方式更改CreateUserWizard控件的布局(模板)?我想定义另一个布局(不使用hord表),但继续使用所有事件处理和CreateUserWizard控件用户的创建。 仅供参考,以下代码不起作用,并产生了一个完全不代表我的模板的意外结果。未调用ITemplate的“InstanceIn”方法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
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代码”一文。谢谢你的链接。我按照你的建议和提示设法让它工作。所以你的答案是正确的。我想迟做总比不做强!:)