2010-05-04 6 views
0

Je pense à la conversion de quelques commandes usercour utiliser des modèles à la place. L'un d'eux est mon propre UC qui contient des contrôles, dont un répéteur. Est-il possible de spécifier un modèle pour le contrôle de deuxième niveau à partir du modèle pour le premier (qui serait sur la page)?ASP.NET - Modèles personnalisés imbriqués

Répondre

1

En supposant que je comprends bien votre question, essayez quelque chose comme ceci:

Page.aspx:

<%@ Page Language="C#" %> 
<%@ Register src="UC.ascx" tagname="UC" tagprefix="uc1" %> 

<uc1:UC ID="UC1" runat="server"> 
<RepeaterTemplate> 
    <%# Eval("Name") %> <%# Eval("Age") %><br /> 
</RepeaterTemplate> 
</uc1:UC> 

UC.ascx:

<%@ Control Language="C#" ClassName="UC" %> 

<script runat="server"> 
    class Person { 
     public string Name { get; set; } 
     public int Age { get; set; } 
    } 

    protected void Page_Load(object sender, EventArgs e) { 
     repeater1.ItemTemplate = RepeaterTemplate; 
     repeater1.DataSource = new Person[] { 
      new Person { Name="Joe", Age=20}, 
      new Person { Name="Jack", Age=30}, 
     }; 
     repeater1.DataBind(); 
    } 

    public ITemplate RepeaterTemplate { get; set; } 
</script> 

<asp:Repeater runat="server" ID="repeater1"> 
</asp:Repeater> 

Ceci passe essentiellement sur le modèle indiqué sur la page externe au répéteur dans le contrôle de l'utilisateur.

Ce n'est peut-être pas exactement votre scénario, mais j'espère que cela vous donnera des idées.

+0

On dirait que cela pourrait fonctionner. Je retiendrai le marquage comme réponse jusqu'à ce que la date limite du bountry soit fermée. Merci. :) – Echilon

0

Je ne suis pas sûr de comprendre votre question, mais je fais beaucoup de répéteurs multi-niveaux avec des modèles dynamiques. J'utilise UserControls sans code comme un endroit pratique pour mettre le modèle html.

Dans le code derrière (comme un événement ItemDataBound d'un répéteur parent), je sélectionne le modèle approprié et configurer:

repeater.ItemTemplate = MyBase.LoadTemplate(templateControlName) 
repeater.DataSource = dataSource 
repeater.DataBind()