マスターページを利用したページのUIコントロールを取得する場合、コードビハインドからPage.FindControlやPage.Form.FindControlでUIコントロールの取得が取得できない。
例えば、マスターページとコンテンツ領域を下記のように記述した場合、ContentPlaceHolderのUIコントロールから取得するようになる。
イメージ的にはDOMの構造を辿れって感じっぽい。
【マスターページ】
<form id="form_1" runat="server"> <asp:ContentPlaceHolder ID="ContentPlaceHolder_1" runat="server"> <!-- コンテンツの領域 --> </asp:ContentPlaceHolder> <asp:HiddenField runat="server" ID="txt_hid_FUGA" Value="0" /> </form>
【コンテンツ領域】
<asp:HiddenField runat="server" ID="txt_hid_HOGE" Value="0" />
コンテンツ領域のtxt_hid_HOGEのUIコントロールを取得する場合は、下記のように取得する。
Page.Form.FindControl("ContentPlaceHolder_1").FindControl("txt_hid_HOGE")
ちなみにマスターページに記述したUIコントロールを取得する場合は、下記のような記述もできる。
Page.Master.Form.FindControl("txt_hid_FUGA")