2011-01-18 4 views
0

私はメニューを表す自分のコントロールを持っています。それをCustomMenuと呼んでいます。制御コードファイルは、特別なディレクトリではありません。ユーザーコントロールの種類を認識するためのコードビハインドファイルを取得するにはどうすればよいですか?

マスターページを使用する各ページにコントロールにアクセスする機能を与え、パブリックプロパティを使用して、コントロール自体にレンダリングする必要があるかどうかを指示します。

私はそれを行うためのコントロールにパブリックプロパティを持ち、Page.Master.FindControl( 'IdOfControlIwant')を参照してコントロールを取得できます。

私が抱えている問題は、コントロールの型がコンパイラによって認識されるように見えないことです。メニューコントロールを見つけたら、実際にはそれを扱うことができません。タイプを認識するためのコードを取得できる唯一の方法は、ascxファイルに登録して、少なくとも1つのコントロールをページに追加することです。これは望ましくありません。

思考?

<%@ MasterType VirtualPath="~/your.master" %> 

あなたがページによってアクセスできるプロパティを追加することができるはずですので、強く、あなたのマスターページ参照を入力します:

答えて

1

Jacobとdzendrasの両方の投稿を結合する必要があります。あなたのコンテンツページのASPXファイルにMasterTypeディレクティブを追加します。

<%@ MasterType VirtualPath="~/your.master" %> 

そして、マスターページでプロパティを作成:

public CustomMenu MyCustomMenu {get{ return myCustomMenu;}} 

myCustomeMenuは、あなたのマスターページでユーザーコントロールのIDです。

これで、コンテンツページからusercontrolを参照できるようになりました。したがって、CustomMenuユーザーコントロールにSelectedItemというプロパティがある場合は、次のようにアクセスできます。

public void Page_Load(object o, EventArgs e) 
    { 
     Master.MyCustomMenu.SelectedItem = 1; 
    } 
+0

Jacobはプロパティーについて言及していますが、この回答は消化しやすいです。興味深いのは、これは私の問題を解決しますが、それは素晴らしいですが、あなたが操作しているページにコントロールがないときに、ユーザーコントロールと直接やりとりする方法があるかどうか疑問に思っています。 – Alkix

+0

一般的なイベントとイベントハンドラを使用することによって、確かに...です。 – Cognitronic

1

は、ページ内MasterTypeディレクティブを使用してください。

0

あなたのマスターページクラスのプロパティ行います

bool IsCustomMenuVisible {set{ CustomMenu.Visible = value;}} 

をそして、あなたは好きな場所にそれを使用。

関連する問題