Question

En quelque sorte, en rapport avec ma autre question - J'ai uniquement utilisé HTMLControls avec runat = " server " et WebControls à contrecœur, préférant avoir le contrôle sur le balisage généré (y compris les identifiants des éléments, etc.).

Que suggérez-vous pour parcourir, par exemple, le contenu d'une collection et générer une table ou une liste sans recourir à la liaison de données ni à l'utilisation de Response.Write dans une boucle à partir du code-behind? Je suis intéressé par les différentes approches pour créer un code propre et maintenable.

Était-ce utile?

La solution

Lorsque vous dites "databinding", parlez-vous de lier un ensemble de résultats de base de données à un Gridview ou à un répéteur, etc. via un appel .Bind (), ou utilisez-vous simplement un contrôle serveur ASP.NET (ou un contrôle serveur HTML) en général?

En effet, si vous voulez simplement éviter d'utiliser les contrôles serveur, mais que vous ne voulez pas non plus utiliser Response.Write, vos options sont sérieusement limitées.

Personnellement, si vous souhaitez contrôler le balisage, pourquoi ne pas simplement parcourir SqlDataReader ou quelque chose du genre, puis enregistrer les résultats dans un contrôle Literal, en utilisant HTML, le cas échéant. Ensuite, dans la page (où que vous souhaitiez que les données apparaissent), faites simplement:

 <asp:Literal ID="ltrResults" runat="server" />

Autres conseils

Rien ne vous empêche de parcourir votre collection directement dans votre page aspx.

 <ul>
     <% foreach(Person person in this.People) {%>

         <li><%=person.Firstname %> <%=person.Lastname %></li>

     <% } %>
 </ul>

Dans cet exemple, People est une propriété de liste sur mon codebehind. Vous trouverez de nombreux projets ASP.NET MVC utilisant cette méthode.

@Brownie ... oui, mais ce sont des déclarations Response.Write ... vous utilisez simplement le format abrégé

Inspiré par la première suggestion, j'ai également essayé d'ajouter un PlaceHolder à l'aspx puis d'y ajouter des contrôles enfants par programme à partir du code-behind. J'espère pouvoir créer un contrôle utilisateur pour le contenu répété, puis l'ajouter au PlaceHolder en boucle. Cela permettra au code de l'interface utilisateur d'être bien encapsulé et devrait masquer toutes les actions de StringBuilder.

Le contrôle de répéteur est utilisé pour exactement ce que vous voulez. C'est un contrôle serveur, mais vous spécifiez quel HTML est généré dans les modèles. Vous faites databind, mais n'est-ce pas juste un raccourci pour une boucle manuelle?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top