Удостоверьтесь все страницы, которые Вы создаете, статичны, никакая база данных, и не используют изображения.
На самом деле, это место не делает ЭТОГО плохо.
Trying to do Eval("Field").Property in the header template would throw a null exception.
I would do something like this...
Code Behind
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
List<SomeData> data = new List<SomeData>();
data.Add(new SomeData("Bob"));
data.Add(new SomeData("Joe"));
Repeater1.DataSource = data;
Repeater1.DataBind();
}
public String FirstnameColumn {
get { return "Firstname"; }
}
}
public class SomeData
{
public String Firstname { get; set; }
public SomeData(String firstname) {
this.Firstname = firstname;
}
}
Markup
<table>
<asp:Repeater ID="Repeater1" runat="server">
<HeaderTemplate>
<tr><td><%= FirstnameColumn %></td></tr>
</HeaderTemplate>
<ItemTemplate>
<tr><td><%# Eval("Firstname") %></td></tr>
</ItemTemplate>
</asp:Repeater>
</table>
Вы можете переместить заголовок таблицы в свой ItemTemplate следующим образом:
<ItemTemplate>
<asp:Panel runat="server" Visible='<%# Container.DisplayIndex == 0 %>'>
<tr>
<th><%# Eval("Forename").HeaderName %></th>
</tr>
</asp:Panel>
<tr>
<td><%# Eval("Forename") %></td>
</tr>
</ItemTemplate>
, хотя это немного расточительно, так как заголовок будет привязан для каждой строки (хотя только первая показанная). Возможно, было бы лучше использовать <% if (...)%> вместо Panel, но я не знаю, как получить доступ к Container.DisplayIndex в этом контексте.
Изменить:
В .net 4.5 Container.DisplayIndex
не работает; замените на Container.ItemIndex
.
Полный пример:
<ItemTemplate>
<asp:Panel runat="server" Visible='<%# Container.ItemIndex == 0 %>'>
<tr>
<th><%# Eval("Forename").HeaderName %></th>
</tr>
</asp:Panel>
<tr>
<td><%# Eval("Forename") %></td>
</tr>
</ItemTemplate>
Вы не можете использовать <% #%>
синтаксис в HeaderTemplate, потому что он не используется в сценарии привязки данных. Однако вы должны иметь возможность использовать <% =%>
, а затем поместить какой-нибудь метод на свою страницу / пользовательский элемент управления, который возвращает заголовок.