2011-01-01 10 views
2

CreateUserWizardコントロールのレイアウト(テンプレート)のみをプログラムで変更する方法はありますか?私は別のレイアウトを定義する(恐ろしいテーブルを使用しない)が、CreateUserWizardコントロールのユーザーのすべてのイベントの処理と作成を使用し続けます。 参考のため、次のコードは機能せず、テンプレートをまったく表現していない予期しない結果を生成します。 ITemplateの "InstantiateIn"メソッドは呼び出されません。CreateUserWizardコントロールのレイアウトを変更する方法は?

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" }); 
     } 
    } 
} 
+1

これをprogrammaticalyに追加する理由は何ですか?または表形式を削除する理由はありますか?必要に応じて、マークアップ内のレイアウトをカスタマイズできます。そして4.0では、asp.netはそれをテーブルとしてそれ以上レンダリングしません。 – gbs

+1

@gbs:ご提案いただきありがとうございますが、コントロールがコンパイル済みのdllで終了するため、マークアップはありません。また、私は単にテーブルを取り除こうとしているのではなく、解析されたXMLファイルからプログラムでContentTemplateを構築しています。したがって、レイアウトは非常に変化しやすいでしょう。私はLoginコントロールにも同様のアプローチを使用しましたが、これは完全に機能します。しかし、LoginコントロールはITemplateのInstantiateInメソッドを呼び出しますが、CreateUserWizardは呼び出されません。 – Bazzz

答えて

2

私はこの作業の理由は分からないが、それはありません:私は、ページにCreateUserWizardコントロールを追加し、空白ContentTemplateを追加し、debugging generated ASP.NET codeにするための指示に従ったんでした

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

何ASP.NETコードジェネレータの機能をリバースエンジニアリングします。

+0

あなたの提案をありがとうグレッグ、私はこれに似た何かを試してみて、CreateUserWizardが1つのCreateUserWizardStepしか持つことができないというエラーを出すと思います。また、CreateUserWizard.CreateUserStepは読み取り専用ですので、新しいものを作成して現在のものを置き換えることはできません。 – Bazzz

+0

最悪の場合のシナリオでは、asp.netが動作させるために何をしているのかを把握するために、生成されたコードと同じステップを実行することができます。 – Greg

+0

「ASP.netコードを生成するデバッグ」の記事を見ていきます。リンクありがとう。 – Bazzz

関連する問題