コンテンツ ページからマスター ページの .Net 要素にアクセスするにはどうすればよいですか?
質問
マスターページ内にロードされたページからマスターページの要素にアクセスすることは可能ですか? ContentPlaceHolder
マスターのために?
マスター ページのナビゲーション領域に人の名前をリストする ListView があります。ListView がデータ バインドされているテーブルに人が追加された後、ListView を更新したいと考えています。の ListView
現在、キャッシュが再ロードされるまで値は更新されません。を再実行するだけで、 ListView.DataBind()
リストビューの内容を更新します。を実行できませんでした。 ListView.DataBind()
マスターページを使用するページ。
以下は私がやりたかったことのサンプルですが、コンパイラエラーが表示されます
「PeopleListView は現在のコンテキストに存在しません」
GIS.master - ListView が存在する場所
...<asp:ListView ID="PeopleListView"...
GISInput_People.aspx - GIS.master をマスター ページとして使用します
GISInput_People.aspx.cs
AddNewPerson()
{
// Add person to table
....
// Update Person List
PeopleListView.DataBind();
...
}
C# .Net でこのような問題を解決する最善の方法は何でしょうか?
解決
私はあなたを信じています できた this.Master.FindControl または同様のものを使用してこれを実行しますが、おそらくそうすべきではありません。コンテンツ ページはマスター ページの構造について十分に理解する必要があります。
マスターがリッスンして、起動時に再バインドできるコンテンツ領域でイベントを起動するなど、別の方法をお勧めします。
他のヒント
マスター ページ上のコントロールの名前が「PeopleListView」であると仮定します。
ListView peopleListView = (ListView)this.Master.FindControl("PeopleListView");
peopleListView.DataSource = [whatever];
peopleListView.DataBind();
しかし @パームジー 特にページに複数のマスター ページが存在する可能性がある場合は、この方が正確です。それらを切り離してイベントを使用します。
オプション 1 : マスター ページ コントロールのパブリック プロパティを作成できます
public TextBox PropMasterTextBox1
{
get { return txtMasterBox1; }
set { txtMasterBox1 = value; }
}
のようなコンテンツページからアクセスしてください
Master.PropMasterTextBox1.Text="SomeString";
オプション 2:マスターページ:
public string SetMasterTextBox1Text
{
get { return txtMasterBox1.Text; }
set { txtMasterBox1.Text = value; }
}
コンテンツページ:
Master.SetMasterTextBox1Text="someText";
オプション 3 :自分に合ったパブリックメソッドを作成できます
これらのアプローチはあまり便利ではありませんが、限定された事前定義されたコントロールを使用したい場合に役立ちます。
覚えておくとよいのは、次の ASP.NET ディレクティブです。
<%@ MasterType attribute="value" [attribute="value"...] %>
マスター ページへの厳密に型指定された参照を作成すると、this.Master を参照するときに役立ちます。これで、CAST を行わなくても ListView を参照できるようになります。
コード this.Master.FindControl(ControlID) を使用して、必要なコントロールにアクセスできます。変更が有効になるように、コントロールの参照を返します。イベントの発生については、状況ごとに可能であるとは限りません。
マスター ページの名前が MyMaster であると仮定します。
(Master as MyMaster).PeopleListView.DataBind();
編集: PeopleListView はデフォルトで保護されていると宣言されるため、これを public に変更するか、ページからアクセスできるように public プロパティ ラッパーを作成する必要があります。