私は1ページのaspxと1ユーザーコントロールを持っています。私はユーザーコントロールページのコードの背後にaspxページの非表示フィールドにアクセスしたい。ユーザーコントロールの隠しフィールドの親ページにアクセスする方法
私にこれを手伝ってください。
私は1ページのaspxと1ユーザーコントロールを持っています。私はユーザーコントロールページのコードの背後にaspxページの非表示フィールドにアクセスしたい。ユーザーコントロールの隠しフィールドの親ページにアクセスする方法
私にこれを手伝ってください。
ここでそれを行うための一つの方法だ:
ユーザーコントロールを含むページタイプと密接に結合するので、私はこのアプローチが本当に気に入らないが、これはウェブフォームで頻繁に起こるようだ。
例
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
}
}
使用Page.FindControl
var hiddenField = this.Page.FindControl("hiddenField") as HiddenField;
しかし、あなたはページタイプ –
@AdrianIftode知っておく必要があります - あなたは親を設定するためのgenericized方法を追加することができますどのように手の込んだあなたが取得したい、に応じて。親にインターフェースを実装させることができます。または、私の例のように、親のタイプをハードコードすることもできます。私が言ったように、私はこれが促進するタイトなカップリングが気に入らない。 –
親ページにthis.Pageプロパティでアクセスし、FindControlメソッドを使用することができます。 –