At first glance, it seems to be strange, but it's actually possible to combine user controls and Master Pages without limitations and with the aim of reusing existing layouts. Therefore, the @Control directive offers a "master" attribute similar to @Page.
The sample in Listing 4-6 shows such an approach in combination with Master Pages, a user control, and a page putting it all together. The Master Page contains a table with two ContentPlaceHolder controls in it. Those are filled through the user control. As you can see from Figure 4-7, all elements are displayed correctly. Of course, you could also think about adding a Master Page for the page itself.
// UCMaster.master
<%@ master language="C#" %>
<table id="Table1" bordercolor="black" cellspacing="1" cellpadding="1" width="100%"
border="2">
<tr>
<td>
<asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
</asp:contentplaceholder>
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td>This is my Master Page!</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
<asp:contentplaceholder id="ContentPlaceHolder2" runat="server">
</asp:contentplaceholder>
</td>
</tr>
</table>
// UCMaster.ascx
<%@ control language="C#" classname="UCMaster" master="~/UCMaster.master" %>
<asp:content id="Content1"
contentplaceholderid="ContentPlaceHolder1"
runat="server">
This is my User Control
</asp:content>
<asp:content id="Content2"
contentplaceholderid="ContentPlaceHolder2"
runat="server">
This is my User Control, too
</asp:content>
// UCMaster.aspx
<%@ page language="C#" %>
<%@ register tagprefix="uc1" tagname="UCMaster" src="~/UCMaster.ascx" %>
<script runat="server">
</script>
<html>
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form runat="server">
<p>This text is embedded in the page itself.</p>
<uc1:ucmaster id="UCMaster1" runat="server"></uc1:ucmaster>
<p>This text is again embedded in the page.</p>
</form>
</body>
</html>