چرا از UserControl استفاده نمی کنی (تو بیشتر سایت ها برای چند پوسته بودن مورد استفاده است).
یا یه روش دیگه از فایل Html . که البته اینجا من روش html رو می گم.

فایل test.html رو ایجاد کن


<table style="width:100%;"><tr>
<tr>
<td >[:Body:]</td>
</tr>
</table>


لازم خواهد بود تا کنترل سفارشی مان را به صورت دستی رند کنیم پس:

public static string RenderControls(ControlCollection ctrls)
{
if (ctrls == null) return "";
StringWriter strwriter = new StringWriter();
HtmlTextWriter writer = new HtmlTextWriter(strwriter);
foreach (Control ctrl in ctrls)
{
ctrl.RenderControl(writer);
}
string result = strwriter.ToString();
strwriter.Close();
writer.Close();
return result;
}



خواندن محتویات فایل:

public static string LoadHtml(string name)
{
string html = File.ReadAllText(HttpContext.Current.Server.MapPat h(name));
}


و سر انجام مراحل رندر کنترل را باز نویسی می کنیم:

protected override void Render(HtmlTextWriter writer)
{
const string tagContent = "[:Body:]";
base.Render(writer);
string theme = LoadHtml("test.html");
string content =RenderControls( this.Controls);
writer.Write(theme.Replace(tagContent, content));
theme = null;
content = null;
}


به شخصه روش UserControl ها رو بیشتر می پسندم چونکه امکان مانور روش زیاد است و حافظه کمتری رو کنترل ها و تم های بزرگ برای asp.net داره.
اگر مایل باشید یه نمونه برای آن هم مثال بزنم.