Delen via


BLL- en DAL-Level-uitzonderingen verwerken op een ASP.NET-pagina (C#)

door Scott Mitchell

PDF downloaden

In deze zelfstudie zien we hoe u een beschrijvend, informatief foutbericht kunt weergeven als er een uitzondering optreedt tijdens het invoegen, bijwerken of verwijderen van een ASP.NET gegevenswebbesturing.

Introductie

Het werken met gegevens van een ASP.NET-webtoepassing met behulp van een gelaagde toepassingsarchitectuur omvat de volgende drie algemene stappen:

  1. Bepaal welke methode van de bedrijfslogicalaag moet worden aangeroepen en welke parameterwaarden moeten worden doorgegeven. De parameterwaarden kunnen worden hard gecodeerd, programmatisch toegewezen, of door de gebruiker ingevoerde waarden.
  2. Roep de methode aan.
  3. De resultaten verwerken. Bij het aanroepen van een BLL-methode die gegevens retourneert, kan dit betrekking hebben op het binden van de gegevens aan een gegevenswebbeheer. Voor BLL-methoden die gegevens wijzigen, kan dit inhouden dat er een bepaalde actie wordt ondernomen op basis van een retourwaarde of dat uitzonderingen die zijn ontstaan in stap 2 op een nette manier worden afgehandeld.

Zoals we in de vorige zelfstudie hebben gezien, bieden zowel de ObjectDataSource- als de besturingselementen voor gegevensweb uitbreidbaarheid voor stap 1 en 3. GridView roept zijn RowUpdating gebeurtenis aan voordat de veldwaarden worden toegewezen aan de UpdateParameters verzameling van de ObjectDataSource; zijn RowUpdated gebeurtenis wordt aangeroepen nadat de ObjectDataSource de bewerking heeft voltooid.

We hebben de gebeurtenissen onderzocht die tijdens stap 1 worden geactiveerd en hebben gezien hoe ze kunnen worden gebruikt om de invoerparameters aan te passen of de bewerking te annuleren. In deze tutorial richten we onze aandacht op de gebeurtenissen die worden geactiveerd nadat de bewerking is voltooid. Met deze gebeurtenis-handlers op post-niveau kunnen we onder andere bepalen of er een uitzondering is opgetreden tijdens de bewerking en deze probleemloos afhandelen, waarbij een vriendelijk, informatief foutbericht op het scherm wordt weergegeven in plaats van standaard te verwijzen naar de standaardpagina ASP.NET uitzonderingspagina.

Ter illustratie van het werken met deze gebeurtenissen op postniveau maken we een pagina met de producten in een bewerkbare GridView. Wanneer u een product bijwerkt, wordt op onze ASP.NET pagina een kort bericht weergegeven boven de GridView waarin wordt uitgelegd dat er een probleem is opgetreden. Laten we aan de slag gaan.

Stap 1: Een bewerkbare rasterweergave van producten maken

In de vorige zelfstudie hebben we een bewerkbare GridView gemaakt met slechts twee velden en ProductNameUnitPrice. Dit vereist het maken van een extra overbelasting voor de methode van ProductsBLL de UpdateProduct klasse, één die slechts drie invoerparameters (de naam, eenheidsprijs en id van het product) heeft geaccepteerd in plaats van een parameter voor elk productveld. Voor deze zelfstudie gaan we deze techniek opnieuw oefenen, waarbij we een bewerkbare GridView maken waarin de naam, hoeveelheid per eenheid, eenheidsprijs en eenheden op voorraad worden weergegeven, maar alleen de naam, eenheidsprijs en eenheden op voorraad kunnen worden bewerkt.

Voor dit scenario hebben we een andere overbelasting van de UpdateProduct methode nodig, een die vier parameters accepteert: de naam, eenheidsprijs, eenheden op voorraad en id van het product. Voeg de volgende methode toe aan de klasse ProductsBLL:

[System.ComponentModel.DataObjectMethodAttribute(
    System.ComponentModel.DataObjectMethodType.Update, false)]
public bool UpdateProduct(string productName, decimal? unitPrice, short? unitsInStock,
    int productID)
{
    Northwind.ProductsDataTable products = Adapter.GetProductByProductID(productID);
    if (products.Count == 0)
        // no matching record found, return false
        return false;
    Northwind.ProductsRow product = products[0];
    product.ProductName = productName;
    if (unitPrice == null) product.SetUnitPriceNull();
      else product.UnitPrice = unitPrice.Value;
    if (unitsInStock == null) product.SetUnitsInStockNull();
      else product.UnitsInStock = unitsInStock.Value;
    // Update the product record
    int rowsAffected = Adapter.Update(product);
    // Return true if precisely one row was updated, otherwise false
    return rowsAffected == 1;
}

Als deze methode is voltooid, zijn we klaar om de ASP.NET pagina te maken waarmee deze vier specifieke productvelden kunnen worden bewerkt. Open de ErrorHandling.aspx pagina in de EditInsertDelete map en voeg een GridView toe aan de pagina via de ontwerpfunctie. Bind de GridView aan een nieuwe ObjectDataSource, waarbij de Select() methode wordt gekoppeld aan de ProductsBLL klasse's GetProducts() methode en de Update() methode aan de zojuist gemaakte UpdateProduct overbelasting.

Gebruik de overload van de UpdateProduct-methode die vier invoerparameters accepteert

Afbeelding 1: Gebruik de overbelasting van de UpdateProduct methode die vier invoerparameters accepteert (klik om de afbeelding op volledige grootte weer te geven)

Hiermee maakt u een ObjectDataSource met een UpdateParameters verzameling met vier parameters en een GridView met een veld voor elk van de productvelden. De declaratieve markup van ObjectDataSource wijst de OldValuesParameterFormatString eigenschap de waarde original_{0} toe, wat een uitzondering veroorzaakt omdat onze BLL-klasse geen invoerparameter met de naam original_productID verwacht. Vergeet niet deze instelling helemaal te verwijderen uit de declaratieve syntaxis (of stel deze in op de standaardwaarde). {0}

Verminder vervolgens de GridView zodat deze alleen de ProductName, QuantityPerUnit, UnitPrice en UnitsInStock BoundFields bevat. U kunt ook alle opmaak op veldniveau toepassen die u nodig acht (zoals het wijzigen van de HeaderText eigenschappen).

In de vorige zelfstudie hebben we gekeken naar het opmaken van het UnitPrice BoundField als een valuta, zowel in de modus Alleen-lezen als in de bewerkingsmodus. Laten we hetzelfde doen. Vergeet niet dat hiervoor de eigenschap van de BoundField DataFormatString moet worden ingesteld op {0:c}, de eigenschap HtmlEncode op false, en de eigenschap ApplyFormatInEditMode op true, zoals weergegeven in figuur 2.

Het afhankelijke veld UnitPrice configureren om weer te geven als een valuta

Afbeelding 2: Het afhankelijke veld configureren UnitPrice om weer te geven als een valuta (klik om de afbeelding op volledige grootte weer te geven)

Om de UnitPrice als valuta op te maken in de bewerkingsinterface, moet u een gebeurtenishandler maken voor het RowUpdating-evenement van de GridView, die de als valuta opgemaakte tekenreeks omzet naar een decimal-waarde. Onthoud dat de RowUpdating gebeurtenis-handler uit de laatste handleiding ook controleerde of de gebruiker een UnitPrice waarde had opgegeven. Voor deze zelfstudie kunnen we echter toestaan dat de gebruiker de prijs weglaat.

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    if (e.NewValues["UnitPrice"] != null)
        e.NewValues["UnitPrice"] =decimal.Parse(e.NewValues["UnitPrice"].ToString(),
            System.Globalization.NumberStyles.Currency);
}

Onze GridView bevat een QuantityPerUnit BoundField, maar dit BoundField mag alleen voor weergavedoeleinden zijn en mag niet door de gebruiker kunnen worden bewerkt. Als u dit wilt rangschikken, stelt u de eigenschap BoundFields ReadOnly in op true.

Het veld QuantityPerUnit instellen als alleen-lezen

Afbeelding 3: De QuantityPerUnit BoundField-Read-Only maken (klik om de afbeelding op volledige grootte weer te geven)

Schakel ten slotte het selectievakje "Bewerken inschakelen" in via de slimme tag van GridView. Nadat u deze stappen hebt voltooid, moet de ontwerpfunctie van de ErrorHandling.aspx pagina er ongeveer uitzien als in afbeelding 4.

Verwijder alle BoundFields behalve de benodigde en schakel het selectievakje voor bewerken in

Afbeelding 4: Verwijder alle BoundFields behalve de benodigde en vink het selectievakje Bewerken inschakelen aan (klik om de volledige afbeelding te bekijken)

Op dit punt hebben we een lijst met alle productenProductName, QuantityPerUnitUnitPriceen UnitsInStock velden, maar alleen de ProductName, UnitPriceen UnitsInStock velden kunnen worden bewerkt.

Gebruikers kunnen nu eenvoudig de namen, prijzen en eenheden van producten in voorraadvelden bewerken

Afbeelding 5: Gebruikers kunnen nu eenvoudig de namen, prijzen en eenheden van producten in voorraadvelden bewerken (klik om de volledige afbeelding weer te geven)

Stap 2: Probleemloos DAL-Level uitzonderingen verwerken

Hoewel onze bewerkbare GridView geweldig werkt wanneer gebruikers juridische waarden invoeren voor de bewerkte productnaam, prijs en eenheden op voorraad, resulteert het invoeren van illegale waarden in een uitzondering. Als u bijvoorbeeld de ProductName waarde weglaat, wordt er een NoNullAllowedException gegenereerd omdat de ProductName eigenschap in de ProductsRow klasse de eigenschap heeft AllowDBNull ingesteld op false; als de database niet beschikbaar is, wordt er een SqlException gegenereerd door de TableAdapter wanneer er wordt geprobeerd verbinding te maken met de database. Zonder actie te ondernemen, gaan deze uitzonderingen omhoog van de Data Access-laag naar de bedrijfslogicalaag, vervolgens naar de ASP.NET pagina en ten slotte naar de ASP.NET runtime.

Afhankelijk van hoe uw webtoepassing is geconfigureerd en of u de toepassing localhostbezoekt, kan een niet-verwerkte uitzondering resulteren in een algemene serverfoutpagina, een gedetailleerd foutenrapport of een gebruiksvriendelijke webpagina. Zie Foutafhandeling van webtoepassingen in ASP.NET en het element customErrors voor meer informatie over hoe de ASP.NET runtime reageert op een niet-onderschepde uitzondering.

In afbeelding 6 ziet u het scherm dat is opgetreden bij het bijwerken van een product zonder de ProductName waarde op te geven. Dit is het standaard gedetailleerde foutenrapport dat wordt weergegeven bij het doorlopen localhost.

Als u de naam van het product weglaat, worden uitzonderingsgegevens weergegeven

Afbeelding 6: Als u de naam van het product weglaat, worden uitzonderingsgegevens weergegeven (klik hier om de volledige afbeelding weer te geven)

Hoewel dergelijke uitzonderingsdetails nuttig zijn bij het testen van een toepassing, is het presenteren van een eindgebruiker met een dergelijk scherm in het gezicht van een uitzondering minder dan ideaal. Een eindgebruiker weet waarschijnlijk niet wat een NoNullAllowedException is of waarom deze is veroorzaakt. Een betere aanpak is om de gebruiker te presenteren met een meer gebruiksvriendelijk bericht waarin wordt uitgelegd dat er problemen zijn met het bijwerken van het product.

Als er een uitzondering optreedt bij het uitvoeren van de bewerking, bieden de gebeurtenissen op postniveau in zowel de ObjectDataSource als de gegevenswebbesturingselement een middel om deze te detecteren en de uitzondering te voorkomen voordat deze naar de ASP.NET-runtime opgestijgt. In ons voorbeeld maken we een eventhandler voor de RowUpdated-gebeurtenis van GridView die bepaalt of er een uitzondering is opgetreden en, als dat het geval is, worden de details van de uitzondering weergegeven in een Label-webbesturingselement.

Begin door een label toe te voegen aan de ASP.NET-pagina, de eigenschap ID op ExceptionDetails in te stellen en de eigenschap Text leeg te maken. Als u het oog van de gebruiker op dit bericht wilt vestigen, stelt u de CssClass eigenschap in op Warning, een CSS-klasse die we in de vorige tutorial aan het Styles.css bestand hebben toegevoegd. Denk eraan dat deze CSS-klasse ervoor zorgt dat de tekst van het label wordt weergegeven in een rood, cursief, vet, extra groot lettertype.

Voeg een Label-webcontrol toe aan de pagina

Afbeelding 7: Een labelwebbesturingselement toevoegen aan de pagina (klik om de afbeelding op volledige grootte weer te geven)

Omdat we willen dat dit labelwebbesturingselement pas direct zichtbaar is nadat er een uitzondering is opgetreden, stelt u Visible de eigenschap in op false in de Page_Load gebeurtenishandler:

protected void Page_Load(object sender, EventArgs e)
{
    ExceptionDetails.Visible = false;
}

Bij het eerste paginabezoek en bij volgende postbacks zal de ExceptionDetails eigenschap van het Visible besturingselement worden ingesteld op false. Bij een DAL- of BLL-laag uitzondering, die we kunnen detecteren in de RowUpdated GridView's gebeurtenis-handler, stellen we de ExceptionDetails-eigenschap van het Visible-besturingselement in op 'waar'. Omdat gebeurtenis-handlers voor webbeheer plaatsvinden na de Page_Load gebeurtenis-handler in de levenscyclus van de pagina, wordt het label weergegeven. Bij de volgende postback zal de Page_Load gebeurtenis-handler echter de Visible eigenschap weer terugzetten naar false en zal het weer verbergen.

Opmerking

Alternatief kunnen we de noodzaak voor het instellen van de eigenschap ExceptionDetails van het besturingselement Visible in Page_Load verwijderen door de eigenschap Visible toe te wijzen false in de declaratieve syntaxis en de weergavestatus uit te schakelen (door de eigenschap EnableViewState in te stellen op false). In een toekomstige zelfstudie gebruiken we deze alternatieve benadering.

Nu het Label-besturingselement is toegevoegd, is de volgende stap het maken van de eventhandler voor het RowUpdated-evenement van de GridView. Selecteer de GridView in de ontwerpfunctie, ga naar het venster Eigenschappen en klik op het bliksemschichtpictogram, waarin de gebeurtenissen van GridView worden vermeld. Er zou al een invoer moeten zijn voor de RowUpdating gebeurtenis van de GridView, aangezien we eerder in deze zelfstudie een eventhandler voor deze gebeurtenis hebben gemaakt. Maak ook een gebeurtenis-handler voor de RowUpdated gebeurtenis.

Een gebeurtenis-handler maken voor de RowUpdated-gebeurtenis van GridView

Afbeelding 8: Een gebeurtenis-handler maken voor de gebeurtenis van GridView RowUpdated

Opmerking

U kunt de event handler ook maken via de vervolgkeuzelijsten bovenaan het code-behind klassebestand. Selecteer de GridView in de vervolgkeuzelijst aan de linkerkant en het RowUpdated evenement in de vervolgkeuzelijst aan de rechterkant.

Als u deze gebeurtenis-handler maakt, wordt de volgende code toegevoegd aan de code-behind-klasse van de ASP.NET-pagina:

protected void GridView1_RowUpdated(object sender, GridViewUpdatedEventArgs e)
{
}

De tweede invoerparameter van deze gebeurtenis-handler is een object van het type GridViewUpdatedEventArgs, dat drie eigenschappen heeft die van belang zijn voor het afhandelen van uitzonderingen:

  • Exception een verwijzing naar de gegenereerde uitzondering; als er geen uitzondering is gegenereerd, heeft deze eigenschap een waarde van null
  • ExceptionHandled een Booleaanse waarde die aangeeft of de uitzondering al dan niet is verwerkt in de RowUpdated evenementenhandler; wanneer false (de standaardinstelling) wordt de uitzondering opnieuw opgeworpen, via de ASP.NET-runtime omhoog.
  • KeepInEditMode als deze is ingesteld op true, blijft de bewerkte GridView-rij in de bewerkingsmodus; als false (de standaardinstelling), gaat de GridView-rij terug naar de Alleen-lezen modus.

Onze code moet dan controleren of Exception dat niet nullhet geval is, wat betekent dat er een uitzondering is gegenereerd tijdens het uitvoeren van de bewerking. Als dit het geval is, willen we het volgende doen:

  • Een gebruiksvriendelijk bericht weergeven in het ExceptionDetails label
  • Geef aan dat de uitzondering is verwerkt
  • De rij in de GridView in de bewerkingsmodus houden

Met deze volgende code worden deze doelstellingen bereikt:

protected void GridView1_RowUpdated(object sender, GridViewUpdatedEventArgs e)
{
    if (e.Exception != null)
    {
        // Display a user-friendly message
        ExceptionDetails.Visible = true;
        ExceptionDetails.Text = "There was a problem updating the product. ";
        if (e.Exception.InnerException != null)
        {
            Exception inner = e.Exception.InnerException;
            if (inner is System.Data.Common.DbException)
                ExceptionDetails.Text +=
                    "Our database is currently experiencing problems." +
                    "Please try again later.";
            else if (inner is NoNullAllowedException)
                ExceptionDetails.Text +=
                    "There are one or more required fields that are missing.";
            else if (inner is ArgumentException)
            {
                string paramName = ((ArgumentException)inner).ParamName;
                ExceptionDetails.Text +=
                    string.Concat("The ", paramName, " value is illegal.");
            }
            else if (inner is ApplicationException)
                ExceptionDetails.Text += inner.Message;
        }
        // Indicate that the exception has been handled
        e.ExceptionHandled = true;
        // Keep the row in edit mode
        e.KeepInEditMode = true;
    }
}

Deze gebeurtenis-handler begint met controleren of e.Exception gelijk is aan null. Als dat niet het geval is, wordt de eigenschap ExceptionDetails van het Visible Label ingesteld op true, en de eigenschap Text ervan op 'Er is een probleem opgetreden bij het bijwerken van het product'. De details van de werkelijke uitzondering die is gegenereerd bevinden zich in de eigenschap e.Exception van het InnerException object. Deze interne uitzondering wordt onderzocht en, als deze van een bepaald type is, wordt een extra, nuttig bericht toegevoegd aan de eigenschap van ExceptionDetails het Text label. Ten slotte zijn de ExceptionHandled en KeepInEditMode eigenschappen beide ingesteld op true.

In afbeelding 9 ziet u een schermafbeelding van deze pagina wanneer u de naam van het product weglaat; In afbeelding 10 ziet u de resultaten bij het invoeren van een ongeldige UnitPrice waarde (-50).

Het afhankelijke veld ProductName moet een waarde bevatten

Afbeelding 9: Het ProductName BoundField moet een waarde bevatten (klik om de afbeelding op volledige grootte weer te geven)

Negatieve prijswaarden per eenheid zijn niet toegestaan

Afbeelding 10: Negatieve UnitPrice waarden zijn niet toegestaan (klik om de afbeelding op volledige grootte weer te geven)

Door de e.ExceptionHandled eigenschap in te truestellen, heeft de RowUpdated gebeurtenis-handler aangegeven dat deze de uitzondering heeft verwerkt. Daarom wordt de uitzondering niet doorgegeven aan de ASP.NET runtime.

Opmerking

In afbeeldingen 9 en 10 ziet u een sierlijke manier om uitzonderingen te verwerken die worden gegenereerd vanwege ongeldige gebruikersinvoer. In het ideale geval bereikt dergelijke ongeldige invoer echter nooit de bedrijfslogicalaag, omdat de ASP.NET-pagina ervoor moet zorgen dat de invoer van de gebruiker geldig is voordat de methode van ProductsBLL de UpdateProduct klasse wordt aangeroepen. In de volgende zelfstudie ziet u hoe u validatiebesturingselementen toevoegt aan het bewerken en invoegen van interfaces om ervoor te zorgen dat de gegevens die naar de bedrijfslogicalaag worden verzonden, voldoen aan de bedrijfsregels. De validatiebesturingselementen verhinderen niet alleen de aanroep van de UpdateProduct methode totdat de door de gebruiker verstrekte gegevens geldig zijn, maar bieden ook een meer informatieve gebruikerservaring voor het identificeren van problemen met gegevensinvoer.

Stap 3: Probleemloos BLL-Level uitzonderingen verwerken

Wanneer u gegevens invoegt, bijwerkt of verwijdert, kan de Data Access-laag een uitzondering genereren ten aanzien van een gegevensgerelateerde fout. De database is mogelijk offline, een vereiste databasetabelkolom heeft mogelijk geen waarde opgegeven of er is mogelijk een beperking op tabelniveau geschonden. Naast strikt gegevensgerelateerde uitzonderingen kan de laag bedrijfslogica uitzonderingen gebruiken om aan te geven wanneer bedrijfsregels zijn geschonden. In de zelfstudie Een bedrijfslogicalaag maken hebben we bijvoorbeeld een bedrijfsregelcontrole toegevoegd aan de oorspronkelijke UpdateProduct overbelasting. Als de gebruiker een product markeert als stopgezet, hebben we vereist dat het product niet de enige is die door haar leverancier wordt geleverd. Als deze voorwaarde werd geschonden, werd er een ApplicationException gegooid.

Voor de UpdateProduct overbelasting die in deze zelfstudie is gemaakt, voegen we een bedrijfsregel toe waarmee wordt voorkomen dat het UnitPrice veld wordt ingesteld op een nieuwe waarde die meer dan twee keer de oorspronkelijke UnitPrice waarde is. Om dit te bereiken, past u de UpdateProduct overbelasting aan zodat deze controle wordt uitgevoerd en genereert u een ApplicationException als de regel wordt geschonden. De bijgewerkte methode volgt:

public bool UpdateProduct(string productName, decimal? unitPrice, short? unitsInStock,
    int productID)
{
    Northwind.ProductsDataTable products = Adapter.GetProductByProductID(productID);
    if (products.Count == 0)
        // no matching record found, return false
        return false;
    Northwind.ProductsRow product = products[0];
    // Make sure the price has not more than doubled
    if (unitPrice != null && !product.IsUnitPriceNull())
        if (unitPrice > product.UnitPrice * 2)
          throw new ApplicationException(
            "When updating a product price," +
            " the new price cannot exceed twice the original price.");
    product.ProductName = productName;
    if (unitPrice == null) product.SetUnitPriceNull();
      else product.UnitPrice = unitPrice.Value;
    if (unitsInStock == null) product.SetUnitsInStockNull();
      else product.UnitsInStock = unitsInStock.Value;
    // Update the product record
    int rowsAffected = Adapter.Update(product);
    // Return true if precisely one row was updated, otherwise false
    return rowsAffected == 1;
}

Met deze wijziging zal elke prijsupdate die meer dan het dubbele van de bestaande prijs is, ertoe leiden dat er een ApplicationException fout optreedt. Net als de uitzondering die is gegenereerd vanuit de DAL, kan deze BLL-gegenereerde ApplicationException worden gedetecteerd en verwerkt in de gebeurtenis-handler van RowUpdated GridView. In feite detecteert de code van de RowUpdated gebeurtenis-handler, zoals geschreven, deze uitzondering correct en geeft de eigenschapswaarde van ApplicationException de Messagegebeurtenis-handler weer. Afbeelding 11 toont een schermafbeelding wanneer een gebruiker de prijs van Chai probeert bij te werken naar $ 50,00, wat meer dan het dubbele is van de huidige prijs van $ 19,95.

De bedrijfsregels weigeren prijsverhogingen die meer dan verdubbelen van de prijs van een product

Afbeelding 11: De bedrijfsregels weigeren prijsverhogingen die meer dan verdubbelen van de prijs van een product (klik om de volledige afbeelding weer te geven)

Opmerking

Idealiter zouden onze bedrijfslogicaregels losgekoppeld worden van de functie-overloads van de UpdateProduct methode en ondergebracht worden in een gemeenschappelijke methode. Dit blijft een oefening voor de lezer.

Samenvatting

Tijdens het invoegen, bijwerken en verwijderen van bewerkingen, zijn zowel het gegevenswebbesturingselement als de ObjectDataSource betrokken bij gebeurtenissen vóór en na het niveau die de werkelijke bewerking boeken. Zoals we in deze tutorial en de vorige hebben gezien, wordt bij het werken met een bewerkbare GridView eerst de RowUpdating-gebeurtenis van de GridView geactiveerd, gevolgd door de Updating-gebeurtenis van de ObjectDataSource, waarna de update-opdracht wordt uitgevoerd op het onderliggende object van de ObjectDataSource. Nadat de bewerking is voltooid, wordt de gebeurtenis van ObjectDataSource Updated geactiveerd, gevolgd door de gebeurtenis van GridView RowUpdated .

We kunnen gebeurtenis-handlers maken voor de gebeurtenissen op pre-niveau om de invoerparameters aan te passen of voor gebeurtenissen op postniveau om de resultaten van de bewerking te controleren en erop te reageren. Gebeurtenis-handlers op postniveau worden meestal gebruikt om te detecteren of er een uitzondering is opgetreden tijdens de bewerking. In het geval van een uitzondering kunnen deze gebeurtenis-handlers op postniveau de uitzondering desgewenst zelf afhandelen. In deze tutorial hebben we gezien hoe u een dergelijke uitzondering kunt afhandelen door een vriendelijke foutmelding weer te geven.

In de volgende zelfstudie ziet u hoe u de kans op uitzonderingen die voortvloeien uit problemen met gegevensopmaak vermindert (zoals het invoeren van een negatief UnitPrice). In het bijzonder bekijken we hoe u validatiebesturingselementen toevoegt aan het bewerken en invoegen van interfaces.

Veel plezier met programmeren!

Over de auteur

Scott Mitchell, auteur van zeven ASP/ASP.NET-boeken en oprichter van 4GuysFromRolla.com, werkt sinds 1998 met Microsoft-webtechnologieën. Scott werkt als onafhankelijk consultant, trainer en schrijver. Zijn laatste boek is Sams Teach Yourself ASP.NET 2.0 in 24 uur. Hij kan worden bereikt op mitchell@4GuysFromRolla.com.

Speciale dank aan

Deze tutorialreeks is beoordeeld door veel behulpzame beoordelers. Hoofdrecensent voor deze zelfstudie was Liz Shulok. Bent u geïnteresseerd in het bekijken van mijn aanstaande MSDN-artikelen? Zo ja, laat iets van je horen via mitchell@4GuysFromRolla.com.