zukucode
主にWEB関連の情報を技術メモとして発信しています。

ASP.NET FindControlでコントロールが取得できない原因

ASP.NETFindControlでコントロールが取得できない時は以下の確認をします。

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")

関連記事