Will man eine Template via LoadTemplate-Methode inkl. DataBinding z.B. in einen Repeater definieren, löst man das wie folgt:

  1. Template in einem .ascx-File definieren, z.B.:
    <%@ Control Language="C#" ClassName="AdminMenuTemplate" %> <script runat="server"> </script> <asp:HyperLink ID="EditHyperLink" runat="Server" NavigateUrl='<%#DataBinder.Eval(DataBinder.GetDataItem(Container),"Key")%>' Text="Test" />

    Wichtig ist hierbei, dass man nicht, wie im Repeater direkt oder anderen DataBoundControls einfach Eval("Key") verwenden kann, sondern den entsprechenden Container referenziert.
    Die Syntax unter ASP.NET 1.1 ist übrigens:
    (Databinder.Eval(Container.DataItem, "Key"))
  2. Definieren und Laden der ItemTemplate (z.B.):
    repeater.ItemTemplate = this.LoadTemplate("~/admin/UI/Controls/AdminMenuTemplate.ascx");
  3. Definierte ITemplate instanziieren:
    repeater.ItemTemplate.InstantiateIn(repeater);
  4. DataBinding ausführen:
    repeater.DataBind();

tags: