J'ai un contrôle utilisateur que j'utilise sur plusieurs pages pour afficher des informations sur un objet. Chaque fois que j'ai besoin d'utiliser ce contrôle, j'appelle une méthode appelée Display (sur la commande usercontrol) et transmets certaines valeurs.Définition des propriétés d'un contrôle utilisateur dans une boucle foreach
public void Display(string name, List<Items> items)
{
// Set a few protected properties so I can display values from the aspx page
}
Cela fonctionne très bien, mais maintenant je dois utiliser cette commande dans une boucle foreach dans une page ASPX.
<% foreach (var c in Categories) { %>
<uc:ItemsControl runat="server"/>
<% } %>
L'objet catégories possède les méthodes et propriétés que je transmettrais dans la méthode Display. Alors, comment pourrais-je définir correctement les valeurs?
J'ai essayé de faire les propriétés sur le public de contrôle de l'utilisateur et les mettre juste la façon suivante:
<uc:ItemsControl Items="<%# c.Items %>"
OtherProperty="<%# c.GetProperty() %>"
runat="server"/>
Cela ne fonctionne pas, parce que les propriétés s'envoyés sont vides. Si j'utilise <% = alors ça ne marche pas et en fait jette une erreur car il ne reconnaît pas 'c' (à moins que je ne supprime runat = "server" alors il compilera au moins, ça ne marchera pas quand même .
Quelle est la bonne façon de le faire
Edit:?. en outre, un contrôle répéteur pourrait rendre cela plus facile pour databinding, mais je préfère éviter l'utilisation de tout contrôle .NET
Un répéteur serait probablement le bon moyen, mais nous essayons d'éviter l'utilisation de contrôles. NET autant que possible et préfèrent aller à la génération de HTML. – Brandon
Oui, moi aussi ... Je trouve aussi l'approche en boucle et émission HTML beaucoup plus simple. C'est pourquoi j'aime ASP.NET MVC. Mais avec Web Forms, si vous utilisez déjà vos propres contrôles personnalisés et devez remplir leurs propriétés, en particulier en boucle, l'utilisation de la liaison de données est la solution la plus simple. Par curiosité, pourquoi éviter les contrôles intégrés d'asp.net? Est-ce une préoccupation liée à la performance ou quelque chose d'autre? Le contrôle du répéteur est * très * bare-bones et fast-- et ne provoque aucun viewstate ou autre crud comme ça. Le répéteur peut agir comme une boucle foreach masquerading comme un contrôle. –
C'est plus une question de cohérence/performance. À l'origine, mon patron avait abandonné les contrôles .NET dans le projet parce que les contrôles/AjaxToolKit étaient trop lourds pour ce dont nous avions besoin, donc une approche purement HTML/jQuery a été adoptée. Si tout le reste échoue je pourrais jeter dans un seul répéteur, je me demandais juste s'il y avait un moyen de le faire en utilisant le chemin que nous avons déjà commencé. – Brandon