コンテンツ ページからマスター ページの要素にアクセスできますか?
MasterPage1 から継承する MasterPage1 と ContentPage1 があり、MasterPage1 にはボタン Button1 があるとします。
そのボタンのプロパティをコンテンツ ページから変更することはできますか? どうすればこれを達成できますか?
私は.net2.0を使用しています
コンテンツ ページからマスター ページの要素にアクセスできますか?
MasterPage1 から継承する MasterPage1 と ContentPage1 があり、MasterPage1 にはボタン Button1 があるとします。
そのボタンのプロパティをコンテンツ ページから変更することはできますか? どうすればこれを達成できますか?
私は.net2.0を使用しています
はい...MasterPageを使用してaspxページからこれを行う必要がある場合は、次のようになります。
Button myButton = (Button)Master.FindControl("myButton");
myButton.Visible = false;
ページ/ユーザー コントロール マークアップに MasterPage への参照を配置する必要があります。
<%@ Reference VirtualPath="..." %>
コード ビハインドでは、Page.MasterPage を MasterPage にキャストし、そのプロパティにアクセスするだけです。
MyMasterPage myMasterPage = (MyMasterPage)Page.Master;
Master.FindControl("myButton").Visible = False
上記のコマンドを実行するために使用するコントロールは、更新パネル内に配置しないように注意してください。
はい、できます。これにはいくつかのアプローチがあります。
私が使用するアプローチは、マスター ページ内のデータの変更/アクセスを行うパブリック メソッドをマスター ページ内に作成することです。たとえば、私は通常、現在表示しているページ/カテゴリのリンク スタイルを変更したいので、マスター ページに次のようなメソッドを用意しています。
Public Sub SetNavigationPage(ByVal MenuName As String)
DirectCast(Me.FindControl(MenuName), HyperLink).CssClass = "MenuCurrent"
End Sub
次に、コンテンツ ページで、このメソッドにそのままアクセスします。
Dim myMaster As EAF = DirectCast(Me.Master, EAF)
myMaster.SetNavigationPage("hypViewEmployee")
...ここで、EAF はマスター ページのクラスの名前です。
私が見つけた興味深い問題の 1 つは、.NET コントロールをこの方法で表示/非表示しようとするときに、.NET コントロールの Visibility プロパティを使用すると複雑になることです。これは、マスター ページとコンテンツ ページのレンダリングが原因です。これを解決するために、表示と非表示の両方に基本的な CSS スタイルを設定し、それに応じて CssClass プロパティを設定しました。