私はいくつかのユーザーコントロールを持っています。ユーザーコントロールは異なるページで使用できます。ユーザーコントロールの動作は、使用されているページによって異なります。ホストページ - ユーザーコントロールの通信ASP.NET
どのように私はすべてのユーザーコントロールがアクセス権を持つホストページ上のパラメータを設定することができますか?
私はいくつかのユーザーコントロールを持っています。ユーザーコントロールは異なるページで使用できます。ユーザーコントロールの動作は、使用されているページによって異なります。ホストページ - ユーザーコントロールの通信ASP.NET
どのように私はすべてのユーザーコントロールがアクセス権を持つホストページ上のパラメータを設定することができますか?
あなたの説明は、「ユーザーコントロールの動作は、彼らが上で使用されているどのページに基づいて異なる」設計上の欠陥を示しています。 ASP.NETのコントロールモデルは、encapsulationおよびOOPの周りに設計されています。つまり、コントロールはその周囲のコンテキストに依存しないようにする必要があります。そのことを念頭に置いてデザインを考え直すべきです。言われた、それは(警告 - 悪い習慣)完全に可能であることを
コントロールが読むことができることをあなたのページにパブリックプロパティを設定するには:
class MyPage : Page
{
public string MyProperty;
}
class MyUserControl : UserControl
{
void Page_Load(object sender, EventArgs e)
{
((MyPage)this.Page).MyProperty //casts Page as the specific page
}
}
私はレックスに同意、私は不審なよ要件の私はそれがクリーナーHttpContext.Current.Itemsコレクションにそれを置くことを見つけ、言っ
。このページでは、そのOnInitに値を設定し、その周りをラップする素敵なクラスを使用して情報を取得します。あなたはラッパーが実際に現在のURLを読んで、またはページの種類を確認することができますしたい場合は
(通常は現在のハンドラであるHttpContext.Current.Handler/Ajaxがあることに影響する場合覚えていません)、その何かを設定するページを必要としないソリューションを得ることができます。
RexMが述べたように、これは複数の理由から悪いことです。コントロールの親ページを参照するためにが必要な場合はと表示された場合、コントロールの参照を親にする代わりに、コントロールへの参照を渡します。
これらのすべてのページが実装する可能性のあるインターフェイスを作成し、コントロールに渡すことを検討します。インターフェイスはタイプセーフティを保証します。新しいページでこのコントロールを使用し始めた場合、そのページではコントロールを使用する前にインターフェイスを実装する必要があります。これは、新しいページにコントロールを投げ、コントロールが親とこの関係を持つことを忘れてしまう場合に役立ちます(この関係は壊れやすいかもしれませんが、それはノー・ノーであるという理由の1つです)。