2011-09-09 7 views
0

Quelle est la différence entre ces exemples de code? Quelle approche est correcte?Pour lier ou ne pas lier

<asp:Label ID="lblShorName" runat="server" Text="<%#Customer.ShorName%>" /> 
lblShorName.DataBind(); 

et

lblShorName.Text = Customer.ShorName; 
+1

La première approche est meilleure lorsque vous souhaitez modifier des sites pairs en production à l'exécution, car elle n'a pas besoin d'être compilée. La seconde est meilleure car elle est précompilée, plus lisible et encapsule le modèle à partir de la vue. En outre, ce dernier est moins sujet aux erreurs car vous voyez des erreurs de compilation à la place des erreurs d'exécution. –

+1

@Tim - Pas tout à fait vrai - vous ne pouvez pas mettre à jour la première approche en production si vous avez déployé une version précompilée de votre application, ce que vous devriez vraiment trouver pour trouver des erreurs de compilation (ASP.NET à la compilation). –

+1

@Jakub: Je ne voulais pas entrer dans les détails, donc c'était seulement un commentaire. Ce que je voulais dire, c'est que j'utilise la première approche uniquement dans un environnement de test où je veux voir/changer des valeurs rapidement. Mais c'est mon opinion subjective. –

Répondre

2

Il n'y a pas beaucoup de différence que je connais (bien que je serai intéressé par les réponses des autres personnes pour me corriger si je me trompe). C'est juste une question de style de codage et de préférence.

Personnellement, je préfère ce dernier. Je pense que c'est plus propre et sépare le balisage de la fonctionnalité qui conduit le balisage. Mais c'est juste moi.

(J'ai aussi tendance à préférer ne pas utiliser la liaison de données là où je ne me sens pas nécessaire, mais, encore une fois, c'est une préférence de la façon dont vous voulez utiliser l'outil fourni. Vue MVC Je suis plus susceptible d'écrire une boucle et de sortir du HTML dans cette boucle que d'utiliser n'importe quel type de répéteur ou de contrôle de grille et de lier des données. jusqu'à où dans votre application, vous souhaitez effectuer ces actions. Le premier exemple le garde sur la page, alors que le dernier exemple peut être enveloppé dans des conditions, re-factorisé dans une autre méthode, etc. S'il est possible que la valeur en question ne soit pas d aller avec le dernier exemple pour ajouter cette logique supplémentaire autour d'elle.

+1

En outre, le second vous donnera des erreurs de compilation, tandis que le premier va exploser lorsque vous visitez la page (ou pendant la précompilation ASP.NET) - ie. lorsque vous avez renommé 'Text' en' Description'. –

+0

@Jakub Konecki: Bon point. Bien que récemment j'ai été déchiré entre la confiance sur la vérification de la compilation (_very_ utile dans une construction d'intégration continue) et les langages dynamiques (Ruby, JavaScript, etc.). J'ai toujours pris la vérification à la compilation pour acquis, mais malgré ce que les partisans des langages dynamiques peuvent dire, je pense toujours que c'est une étape très utile, précisément pour l'exemple que vous donnez. – David

0

Pas grand-chose vraiment, lorsque vous utilisez Databinding votre valeur est définie au moment de la liaison de données, si vous définissez dans le code-behind vous pouvez le configurer toutes les étapes de le cycle de vie des pages.

Vous pouvez avoir une certaine logique derrière la valeur aussi, ce qui est plus lisible/maintenable dans le code-behind.

1

L'approche dépend de la définition de l'étiquette. lblShorName.Text = Customer.ShorName; Peut être utilisé dans différentes méthodes, événements, minuteurs. Si vous voulez le définir seulement au début, vous pouvez utiliser le premier.