FindControl 関数を使用して、ページ上のコントロールを探しています。MSDN では非常にシンプルでわかりやすいように見えますが、コントロールを見つけることができません。私が使用しているページには、aspx ファイルで制御を与える ID の先頭に追加する MasterPageFile があります。機能しない簡単な例:
aspx ページ
<%@ Page Title="Inventory Control Test" Language="VB" AutoEventWireup="false" MasterPageFile="~/Site.master" CodeFile="Default2.aspx.vb" Inherits="Sales_ajaxTest_Default2" %>
<asp:Content ID="conHead" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="conBody" ContentPlaceHolderID="MainBody" Runat="Server">
<asp:Button ID="saveAllBtn" runat="server" Text="Save All" />
</asp:Content>
コードビハインド
Partial Class Sales_ajaxTest_Default2
Inherits System.Web.UI.Page
Protected Sub saveAllBtn_Click(sender As Object, e As System.EventArgs) Handles saveAllBtn.Click
Dim myControl1 As Control = FindControl("ctl00_MainBody_saveAllBtn")
If (Not myControl1 Is Nothing) Then
MsgBox("Control ID is : " & myControl1.ID)
Else
'Response.Write("Control not found.....")
MsgBox("Control not found.....")
End If
End Sub
クラス終了
msgbox は、この例で使用しているだけの Web のものではないことがわかりました。コントロールに与えられた ID である「saveAllBtn」を使用すると、FindControl で「コントロールが見つかりません」と表示されます。これを試してみると、マスターページのないスタンドアロンのページで問題なく動作します。
クロムを使用して要素を調べると、ボタンの ID が「ctl00_MainBody_saveAllBtn」に変更されていることがわかりますが、FindControl でそれを使用すると、「コントロールが見つかりません」というメッセージが表示されます。