Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original
Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

ObjectDataSource.ObjectCreating-Ereignis

Tritt auf, bevor das Objekt durch die TypeName-Eigenschaft erstellt wird.

Namespace:  System.Web.UI.WebControls
Assembly:  System.Web (in System.Web.dll)
public event ObjectDataSourceObjectEventHandler ObjectCreating
<asp:ObjectDataSource OnObjectCreating="ObjectDataSourceObjectEventHandler" />

Wenn die Methode, die identifiziert wird, um den Datenvorgang auszuführen, static (Shared in Visual Basic) ist, werden die ObjectCreating und ObjectCreated-Ereignisse niemals ausgelöst.

Das ObjectDataSource-Steuerelement wird automatisch den Standardkonstruktor eines Geschäftsobjekts an, um eine Instanz davon mithilfe von Reflektion zu erstellen. Behandeln Sie das ObjectCreating-Ereignis, um einen anderen Konstruktor explizit aufzurufen, und legen Sie für die Instanz des Objekts fest, das zur ObjectInstance-Eigenschaft des zugeordneten ObjectDataSourceEventArgs-Objekts ergibt.

Weitere Informationen über die Behandlung von Ereignissen finden Sie Behandeln von Ereignissenunter.

Dieser Abschnitt enthält zwei Codebeispiele. Im ersten Codebeispiel wird veranschaulicht, wie ein ObjectDataSource-Objekt mit einem Geschäftsobjekt und einem GridView-Steuerelement zum Anzeigen von Informationen verwendet wird. Im zweiten Codebeispiel wird das Geschäftsobjekt der mittleren Ebene bereitgestellt, das im ersten Codebeispiel verwendet wird.

Im folgenden Codebeispiel wird veranschaulicht, wie ein ObjectDataSource-Steuerelement zusammen mit einem Geschäftsobjekt und einem GridView-Steuerelement zum Anzeigen von Informationen verwendet wird. Sie funktionieren möglicherweise einem Geschäftsobjekt, das sehr aufwändig ist (als Zeit oder Ressourcen) für jeden Datenvorgang zu erstellen, der Ihre Webseite ausgeführt wird. Eine Möglichkeit, einen aufwändigen Objekt zu umgehen, kann jeweils eine Instanz dieser Klasse zu erstellen und sie dann für folgende Vorgänge zwischenzuspeichern, anstatt es für jeden Datenvorgang zu erstellen und zu löschen.

HinweisHinweis

In einer Produktionsumgebung möglicherweise angehalten mehrere Anforderungen gleichzeitig oben mit der gleichen Instanz. Daher muss das Objekt in einer threadsicheren Weise implementiert werden.

In diesem Codebeispiel wird dieses Muster. Sie können das ObjectCreating-Ereignis behandeln, um den Cache für ein Objekt zuerst zu prüfen und nur eine Instanz des Objekts erstellt, sofern noch zwischengespeichert wird. Anschließend verarbeiten Sie das ObjectDisposing-Ereignis, um das Geschäftsobjekt für die zukünftige Verwendung zwischenzuspeichern, anstatt es zu zerstören. In diesem Codebeispiel wird die CancelEventArgs.Cancel-Eigenschaft des ObjectDataSourceDisposingEventArgs-Objekts zu true festgelegt, um ObjectDataSource zu verweisen, Dispose-Methode für das Objekt aufrufen.


<%@ Import namespace="Samples.AspNet.CS" %>
<%@ Page language="c#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

// Instead of creating and destroying the business object each time, the 
// business object is cached in the ASP.NET Cache.
private void GetEmployeeLogic(object sender, ObjectDataSourceEventArgs e)
{
    // First check to see if an instance of this object already exists in the Cache.
    EmployeeLogic cachedLogic;

    cachedLogic = Cache["ExpensiveEmployeeLogicObject"] as EmployeeLogic;

    if (null == cachedLogic) {
            cachedLogic = new EmployeeLogic();            
    }

    e.ObjectInstance = cachedLogic;     
}

private void ReturnEmployeeLogic(object sender, ObjectDataSourceDisposingEventArgs e)
{    
    // Get the instance of the business object that the ObjectDataSource is working with.
    EmployeeLogic cachedLogic = e.ObjectInstance as EmployeeLogic;        

    // Test to determine whether the object already exists in the cache.
    EmployeeLogic temp = Cache["ExpensiveEmployeeLogicObject"] as EmployeeLogic;

    if (null == temp) {
        // If it does not yet exist in the Cache, add it.
        Cache.Insert("ExpensiveEmployeeLogicObject", cachedLogic);
    }

    // Cancel the event, so that the object will 
    // not be Disposed if it implements IDisposable.
    e.Cancel = true;
}
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head>
    <title>ObjectDataSource - C# Example</title>
  </head>
  <body>
    <form id="Form1" method="post" runat="server">

        <asp:gridview
          id="GridView1"
          runat="server"          
          datasourceid="ObjectDataSource1">
        </asp:gridview>

        <asp:objectdatasource 
          id="ObjectDataSource1"
          runat="server"          
          selectmethod="GetCreateTime"          
          typename="Samples.AspNet.CS.EmployeeLogic"
          onobjectcreating="GetEmployeeLogic"
          onobjectdisposing="ReturnEmployeeLogic" >
        </asp:objectdatasource>        

    </form>
  </body>
</html>


Das folgende Codebeispiel stellt das Beispielgeschäftsobjekt der mittleren Ebene bereit, das im vorherigen Codebeispiel verwendet wird. Das Codebeispiel besteht aus einem einfachen Geschäftsobjekts, durch die EmployeeLogic-Klasse, die eine Klasse ist, die zustandsbehaftete Geschäftslogik kapselt. Für ein vollständiges und funktionsfähiges Beispiel müssen Sie diesen Code als Bibliothek kompilieren und diese Klassen aus einer ASP.NET-Seite (ASPX-Datei) verwenden.


namespace Samples.AspNet.CS {

using System;
using System.Collections;
using System.Web.UI;
using System.Web.UI.WebControls;
  //
  // EmployeeLogic is a stateless business object that encapsulates
  // the operations you can perform on a NorthwindEmployee object.
  //
  public class EmployeeLogic {

    public EmployeeLogic () : this(DateTime.Now) {        
    }

    public EmployeeLogic (DateTime creationTime) { 
        _creationTime = creationTime;
    }

    private DateTime _creationTime;

    // Returns a collection of NorthwindEmployee objects.
    public ICollection GetCreateTime () {
      ArrayList al = new ArrayList();

      // Returns creation time for this example.      
      al.Add("The business object that you are using was created at " + _creationTime);

      return al;
    }
  }
}


.NET Framework

Unterstützt in: 4.5, 4, 3.5, 3.0, 2.0

Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.
Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)

Community-Beiträge

HINZUFÜGEN
© 2013 Microsoft. Alle Rechte vorbehalten.