J'utilise ObjectDataSource avec un GridView avec un gestionnaire OnObjectCreated sur le code-behind. Si je modifie par programme une valeur de contrôle enfant sur GridView, le contrôle entier obtient une deuxième fois dans la même demande (comme indiqué par le gestionnaire OnObjectCreated), ce que je ne veux pas. Cela se produit sur la requête GET de la page initiale (il ne s'agit donc pas d'un problème de publication). Voici ce que montre une trace:ObjectDataSource créé deux fois lorsque le contrôle est modifié
aspx.page Begin PreRender
Custom IN handleDSObjectCreated() => tsDao: ETime.DAL.TimeSheetDAO
Custom OUT handleDSObjectCreated()
Custom IN handleDSObjectCreated() => tsDao: ETime.DAL.TimeSheetDAO
Custom OUT handleDSObjectCreated()
aspx.page End PreRender
Y at-il un moyen d'empêcher le second tour de databinding même si je manipule les commandes de l'enfant? Rien dans la couche de données ne change donc il n'est pas nécessaire. Notez également qu'il n'y a pas d'URL d'image impliquées qui semblent provoquer une double liaison de données. Merci.
Mise à jour:
Je ne sais pas si cela aide ou non, mais en regardant la trace de la pile au moment où le gestionnaire OnObjectCreated est appelé montre les différences suivantes:
premier gestionnaire d'événements invocation:
System.Web.dll!System.Web.UI.WebControls.GridView.DataBind() + 0x5 bytes
System.Web.dll!System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() + 0x53 bytes
System.Web.dll!System.Web.UI.WebControls.GridView.OnPreRender(System.EventArgs e = {System.EventArgs}) + 0x19 bytes
System.Web.dll!System.Web.UI.Control.PreRenderRecursiveInternal() + 0x57 bytes
second gestionnaire des événements d'appel:
System.Web.dll!System.Web.UI.WebControls.GridView.DataBind() + 0x5 bytes
System.Web.dll!System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() + 0x53 bytes
System.Web.dll!System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls() + 0x46 bytes
System.Web.dll!System.Web.UI.Control.EnsureChildControls() + 0x58 bytes
System.Web.dll!System.Web.UI.Control.PreRenderRecursiveInternal() + 0x33 bytes
Encore une fois, tout cela provient de la requête GET initiale. Des idées pour lesquelles il est invoqué deux fois?
Malheureusement pas. Cela se passe sur la requête initiale GET. –