2008-08-08 11 views
11

マスタのContentPlaceHolderにロードされたページからマスタページの要素にアクセスできますか?コンテンツページからMasterページの.Net要素にアクセスするには?

マスターページのナビゲーション領域にユーザーの名前をリストする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でこのような問題を解決する最良の方法は何でしょうか?

(Master as MyMaster).PeopleListView.DataBind(); 

編集: PeopleListViewは、デフォルトで保護宣言されるので、あなたは国民にこれを変更する必要がありますのいずれか、またはそのようパブリックプロパティラッパーを作成して、マスターページがMyMaster命名されたと仮定すると、

答えて

17

これを行うにはthis.Master.FindControlなどを使用してください。ただし、これは必須ではありません。コンテンツページには、マスターページの構造に関する知識が必要です。

私は、マスターが聞くことができたコンテンツエリアでイベントを発生させ、起動時に再バインドするなど、別の方法を提案します。

-1

あなたのページからアクセスすることができます。

4

ListView peopleListView = (ListView)this.Master.FindControl("PeopleListView"); 
peopleListView.DataSource = [whatever]; 
peopleListView.DataBind(); 

マスターページ上のコントロールは、「PeopleListView」と呼ばれていると仮定すると、しかし、palmsey @は、あなたのページに複数のマスターページの可能性を持つことができる場合は特に、より正確です。それを切り離してイベントを使用する。

1

次のASP.NETディレクティブが覚えていると思います。

<%@ MasterType attribute="value" [attribute="value"...] %> 

MSDN Reference

this.Masterを参照するときには、マスターページへの厳密に型指定された参照を作成することで、お手伝いを致します。 CASTを使わずにListViewを参照することができます。

0

このコードでアクセスできます。マスター。FindControl(ControlID)あなたが望むコントロール。コントロールの参照が返され、変更が有効になります。イベントを発射することについては、それぞれの状況が可能ではありませんでした。

2

オプション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: あなた


これらのアプローチはそれほど有用ではありませんのために働くいくつかのパブリックメソッドを作成することができますが、あなただけのいくつかの限定されたとあらかじめ定義されたコントロールを使用する場合には役立ちます

+0

ありがとう、これは動作します。ただし、キャストする必要があります。 ((myMasterPage)Master).SetMasterTextBox1Text = "someText"; –

+0

あなたの実装に依存します...単一のマスターページのために、そうする必要はありません。そのような基本的な例(Print "Hello World!"のような)では、実際の実装ははるかに複雑になるでしょう。 – BrainCoder

+0

これは私が使用した方法であり、セルゲイの追加の変更はありません。私が必要としていたことをうまくやってくれます。おそらく答えとしてマークされているはずです。 +1 – James

関連する問題