2009-10-21 6 views
17

Dans ASP.NET, vous pouvez lier les contrôles individuellement (c'est-à-dire GridView1.DataBind()) ou appeler le Page.DataBind() pour lier tous les contrôles de la page.Quand utiliser Page.DataBind() et Control.DataBind()?

Y a-t-il une différence spécifique entre les deux appels? Y a-t-il des moments où l'un devrait être préféré à l'autre?

Répondre

8

Pour choisir entre Page.DataBind() par rapport Control.DataBind(), voici Microsoft guidance:

« Les deux méthodes fonctionnent de la même La principale différence est que toutes les sources de données sont liées à. leur serveur contrôle après la méthode Page.DataBind est appelé. Aucune donnée n'est rendu au contrôle jusqu'à ce que vous appelez explicitement soit la méthode DataBind du contrôle du serveur Web ou jusqu'à ce que vous appelez la méthode Page.DataBind niveau de la page En règle générale, Page.DataBind (ou DataBind) est appelée à partir de l'événement Page_Load. "

Il y aura des cas où vous souhaitez spécifier une liaison de données de contrôle individuelle, en fonction du scénario de page en cours. Pour un niveau de contrôle détaillé sur quels contrôles sont liés et quand les contrôles sont liés, j'opte pour les méthodes DataBind() au niveau du contrôle.

7

Dans une page ASP.NET, vous pouvez lier directement aux propriétés publiques/protégées de la classe code-behind de votre page. Par exemple:

<form id="form1" runat="server"><%#HtmlUtility.HtmlEncode(MyProperty.ToString())%></form> 

Dans ce cas, il n'y a pas de contrôle spécifique à appeler .DataBind() sur - la page elle-même est le contrôle. Il arrive juste que l'appel de Page.DataBind() appelle aussi DataBind() sur tous les contrôles enfants, donc si vous faites déjà un Page.DataBind(), il n'est pas nécessaire que les données lient les contrôles individuellement.

11

Page.DataBindestControl.DataBind. Ni la classe Page, ni la classe TemplateControl ne remplacent Control.DataBind.

Control.DataBind fait un peu plus que d'appeler OnDataBinding pour le contrôle, puis il appelle DataBind pour chaque contrôle enfant.

+0

C'est pourquoi j'ai demandé :) - juste au cas où il y avait un cas particulier dont je n'étais pas au courant. –

+0

@Downvoter: pourquoi? Est-ce que quelque chose d'inexact? –

+2

Et il y a la nouvelle chose que j'ai apprise aujourd'hui - je n'ai pas réalisé System.Web.UI.Page dérivé de System.Web.UI.Control. Merci. –

0

Ce n'est pas une réponse directe à deux entre les subtilités des appels, mais à propos DataBind() vs Page.DataBind() Je voudrais partager une expérience intéressante qui peut aussi guider vraiment que vous avez choisi entre les deux:

Je viens de passer une journée complète à comprendre pourquoi les appels Ajax et les événements dans une énorme application web étaient cassés (ItemCommand pas soulevé sur les callbacks et les postbacks, les références perdues, etc.).

La raison en était que j'avais un ASCX qui appelait Page.DataBind() plutôt que DataBind() sur lui-même.

Cela peut sembler évident quand vous l'avez trouvé, mais quand vous faites face à un comportement bizarre dans une application> 500000 lignes et beaucoup de complexité dans master/pages/contrôles, ce n'est pas le cas. Alors méfiez-vous de Page.DataBind() si vous l'appelez au mauvais endroit!

Questions connexes