Нет, вы не можете заставить DataGrid оборачиваться так, как вы этого хотите.
Для достижения желаемого эффекта потребуется создать пользовательский элемент управления.
Как уже говорили другие, в зависимости от самого контента существуют ярлыки, которые можно использовать в зависимости от типа контента, который будет там.
Если, однако, вам нужно, чтобы «контент» был полностью функционирующим кодом asp.net, я бы предложил UserControl для каждой ContentPage, которая содержит сам контент, а затем вам нужно дублировать только одну строку кода.
Пример
Мастер-страница
<html>
<body>
<asp:ContentPlaceHolder ID="Foo" runat="server">
</asp:ContentPlaceHolder>
<!-- page content -->
<asp:ContentPlaceHolder ID="Bar" runat="server">
</asp:ContentPlaceHolder>
</body>
</html>
Контент-страница
<asp:Content ID="Top" ContentPlaceHolderID="Foo" runat="server">
<uc1:Page1Control id="page1Control1" runat="server" />
</asp:Content>
<asp:Content ID="Bottom" ContentPlaceHolderID="Bar" runat="server">
<uc1:Page1Control id="page1Control2" runat="server" />
</asp:Content>
В зависимости от содержимого вы можете сделать это в коде. Если это просто HTML, просто поместите его в переменную и назначьте другой. Если у вас есть элементы управления, вы можете перебрать коллекцию элементов управления, создать дубликат элемента управления и поместить его в другую область. В любом случае второе местоположение не будет заполнителем содержимого, которое должно быть указано в div.
Вы можете создать ОБЩЕГО пользователя контролировать то же самое и добавить его на свою главную страницу в верхней и нижней части. Вы можете создать свойство, описывающее, загружен ли элемент управления сверху или снизу.
В случае, когда вы просто хотите повторить строку, это сработало для меня:
<asp:ContentPlaceHolder ID="TitleContent" runat="server" />
На это можно сослаться в другом месте как:
<% Dim title As LiteralControl = TitleContent.Controls.Item(0)
Response.Write(title.Text)
%>
Нет гарантии, что это правильный образ действий, хотя :)
Эй, если кому-то все еще нужно решение для этого, вот что я сделал: Поместите его в файл кода на своей главной странице
protected override void RenderChildren(HtmlTextWriter writer)
{
Control mainPlaceHolder = FindControl("MainContentPlaceHolder");
Control doublePlaceHolder = FindControl("ContentDoublePlaceHolder");
StringBuilder sb = new StringBuilder();
using (StringWriter sw = new StringWriter(sb))
using (HtmlTextWriter tw = new HtmlTextWriter(sw))
{
mainPlaceHolder.RenderControl(tw);
}
LiteralControl lc = new LiteralControl(sb.ToString());
doublePlaceHolder.Controls.Add(lc);
base.RenderChildren(writer);
}
Я не уверен в проблемах с производительностью здесь, но он определенно работает.