2008-12-12 8 views
1

J'essaie de trouver la meilleure pratique pour générer et sortir html qui nécessiterait une requête de base de données d'abord pour obtenir l'info. À l'heure actuelle dans la page ASPX J'ai un div avec le serveur runat:asp.net meilleure pratique concaténation de chaîne

<div runat="server" id="leaflet"></div> 

Maintenant, comme un début à faire un peu de tests que j'ai une méthode qui fonctionne sur page_load qui fait essentiellement:

private void BuildLeaflet(string qnid) 
    { 
    //gets leaflet details 
    QueryLeafletDetails(); 
    //return concatenated content string 
    leaflet.InnerHtml "<h1>" + dr["LSC Descriptor"] + "</h1>"; 
    } 

Dans la solution réelle le retour est une concaténation d'environ 10 champs dont certains sont très longs car ils sont contenus.

Je ne pense en aucun cas que c'est la meilleure solution, mais qu'est-ce que c'est? Un StringBuilder? Puis-je écrire chaque partie à tour de rôle sur le site en évitant la concaténation dans la méthode? Le serveur div est-il le meilleur?

Edit: J'ai oublié de mettre certaines de mes sections de contenu en HTML simple (limité) en eux comme paragraphe, liste ... Cela me permet de produire facilement des documents pour le web et l'impression, j'utilise simplement différentes feuilles de style.

+0

Convertissez le dr [] en chaîne. – StingyJack

Répondre

4

J'utiliserais <asp:Literal runat="server" enableViewState="false" id="leaflet" />. Cela ne génère pas de balises sur la page et ne bourre pas tout le texte dans ViewState.

Et oui, utilisez StringBuilder si vous avez besoin de concaténer plusieurs longues chaînes. Ce sera beaucoup plus efficace en mémoire.

L'autre solution serait de voir si vous pouvez faire un balisage fixe sur la page et mettre le contenu de chaque champ de DB dans son propre contrôle (<asp:Literal />?).

1

J'utiliserais soit string.Format, si le nombre de champs est fixe (et relativement petit), soit un StringBuilder, sinon. La lisibilité du code serait mon guide, moins de performance. Vous pouvez également envisager de l'extraire dans un UserControl si vous envisagez de le réutiliser. Ensuite, vous pouvez lui donner des propriétés paramétrables et construire la logique de rendu dans le contrôle pour éviter de vous répéter.

0

Diverses personnes ont évalué ce format - iirc est bon pour < 4 articles, des concaténaires simples pour < 7, construction de cordes au-dessus de cela.

Je déconseille fortement de créer du HTML en tant que chaînes de caractères.

+0

Avec string.Format, vous découvrirez assez rapidement si vous avez manqué de "concaténer" un champ même s'il est normalement nul. Vous pouvez améliorer la lisibilité en stockant le format en tant que constante de chaîne unique ailleurs dans le code et en le référençant simplement localement. – tvanfosson

+0

Je ne vois pas en quoi votre premier point est pertinent (vous le saurez * exactement au même moment * si vous êtes stringbuilder ou + est faux) et je ne vois pas en quoi votre second point se rapporte à mon post en particulier? Évidemment, le format a des avantages ou il n'existe pas. – annakata

Questions connexes