MasterPages - это классы, как обычный объект Page. Это означает, что вы можете предоставлять внутренние элементы управления через открытые свойства, чтобы разрешить дочерним страницам доступ без необходимости прибегать к Master.FindControl (). Для этого вам просто нужно установить свойство MasterType на странице (я думаю, что оно может работать даже без его установки, но при этом вы получаете поддержку intellisense и избегаете необходимости делать приведения).
Вот базовый пример (извините, он в VB - это копирование и вставка из старого проекта):
Главная страница (.master):
<%@ Master Language="VB" CodeFile="default.master.vb" Inherits="DefaultMaster" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form runat="server">
<ASP:TextBox ID="Search" RunAt="Server"/>
<ASP:ContentPlaceHolder ID="Content" RunAt="Server"/>
</form>
</body>
</html>
Мастер-код (.master.vb):
Partial Class DefaultMaster : Inherits MasterPage
Public ReadOnly Property SearchBox() As TextBox
Get
Return Search
End Get
End Property
End Class
Доступ к странице (.aspx):
<%@ Page Language="VB" MasterPageFile="default.master" CodeFile="page.aspx.vb" Inherits="ExamplePage" %>
<%@ MasterType TypeName="DefaultMaster" %>
<ASP:Content ContentPlaceHolderID="Content" RunAt="Server">
<p>This is some content on the page.</p>
</ASP:Content>
Доступ к коду страницы (.aspx.vb):
Partial Class ExamplePage : Inherits Page
Sub Page_Load(ByVal Sender As Object, ByVal E As EventArgs) Handles MyBase.Load
Master.SearchBox.Text = "This page now has access to the master's search box."
End Sub
End Class