ASP.NET FindControlでコントロールが取得できない原因
ASP.NET
のFindControl
でコントロールが取得できない時は以下の確認をします。
runat=serverが設定されているか確認
基本的なことですが、runat="server"
がコントロールに設定されていないとサーバー処理で扱うことができません。
マスタページを使用している場合
マスタページを継承しているページでは以下のように普通にFindControl
を実行するだけではコントロールが取得できません。
'取得できない
Me.FindControl("TextBox1")
以下のようなマスタページとそれを継承したWeb
ページがあるとします。
Site.Master
<body>
<form id="form1" runat="server">
<div>
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
</body>
WebForm1.aspx
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</div>
</asp:Content>
取得方法
最初に取得したいコントロールを実装してあるマスタページのContentPlaceHolder
を取得し、そのコントロールに対して再度FindControl
を行う必要があります。
Me.Master.FindControl("ContentPlaceHolder1").FindControl("TextBox1")