2012-03-29 12 views

答えて

2

ここでそれを行うための一つの方法だ:

  • 含むページのパブリックプロパティとして隠しフィールドコントロールを公開します。
  • ユーザーコントロールで、ページを含むページの特定の種類にキャストします。
  • プロパティにアクセスします。

ユーザーコントロールを含むページタイプと密接に結合するので、私はこのアプローチが本当に気に入らないが、これはウェブフォームで頻繁に起こるようだ。

public class MyPage : Page 
{ 
    public HtmlInputHidden MyHiddenField 
    { 
     get{ return this.hdnField1; } 
    } 
} 

public class MyUserControl : UserControl 
{ 
    protected override OnLoad(EventArgs e) 
    { 
     MyPage p = (MyPage)Page; 
     HtmlInputHidden h = p.MyHiddenField; 
    } 
} 

例2 - 親がこの例では、子が親の不可知論であるという点で、きれいである子供

を初期化します。しかし、それは適切なタイミングで子を初期化する必要があります(これはWebフォームのページライフサイクルには厄介なことがあります)。親は子の内部の仕組みを知っている必要があります。

public class MyPage : Page 
{ 
    protected override OnLoad(EventArgs e) 
    { 
     this.MyUserControl.Initialize(this.MyHiddenField); 
    } 
} 

public class MyUserControl : UserControl 
{ 
    public void Initialize(HtmlInputHidden input) 
    { 
     // now child user control has access to the data without needing to know 
     // about its parent 
    } 
} 
+0

しかし、あなたはページタイプ –

+0

@AdrianIftode知っておく必要があります - あなたは親を設定するためのgenericized方法を追加することができますどのように手の込んだあなたが取得したい、に応じて。親にインターフェースを実装させることができます。または、私の例のように、親のタイプをハードコードすることもできます。私が言ったように、私はこれが促進するタイトなカップリングが気に入らない。 –

+0

親ページにthis.Pageプロパティでアクセスし、FindControlメソッドを使用することができます。 –

3

使用Page.FindControl

var hiddenField = this.Page.FindControl("hiddenField") as HiddenField; 
関連する問題