Ich verwende eine ObjectDataSource mit einem GridView mit einem OnObjectCreated-Handler auf dem Code-Behind. Wenn ich einen untergeordneten Steuerwert programmgesteuert auf dem GridView ändere, wird das gesamte Steuerelement ein zweites Mal in der gleichen Anforderung (wie durch den Handler OnObjectCreated angezeigt) datenbankgebunden, was ich nicht möchte. Dies geschieht auf der GET-Anfrage der ersten Seite (es handelt sich also nicht um ein Postback-Problem). Hier ist, was eine Spur zeigt:ObjectDataSource zweimal erstellt, wenn Steuerelement geändert wird
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
Gibt es eine Möglichkeit, die zweite Runde der Datenbindung zu verhindern, selbst wenn ich die untergeordneten Steuerelemente zu manipulieren? Nichts in der Datenschicht ändert sich, so dass es nicht benötigt wird. Beachten Sie auch, dass keine Bild-URLs beteiligt sind, die ebenfalls eine doppelte Datenbindung verursachen. Vielen Dank.
Update:
Ich bin nicht sicher, ob das hilft oder nicht, aber an dem Stack-Trace an dem Punkt in der Suche, bei der der OnObjectCreated Handler aufgerufen zeigt folgende Unterschiede:
erste Event-Handler 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 Event Handler 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.CompositeDataBoundControl.CreateChildControls() + 0x46 bytes
System.Web.dll!System.Web.UI.Control.EnsureChildControls() + 0x58 bytes
System.Web.dll!System.Web.UI.Control.PreRenderRecursiveInternal() + 0x33 bytes
Auch dies ist alles von der anfänglichen GET-Anfrage. Irgendwelche Ideen, warum es zweimal aufgerufen wird?
Leider nicht. Es passiert bei der initialen GET-Anfrage. –