Obsługa wyjątków na poziomie warstwy logiki biznesowej i warstwy dostępu do danych na stronie platformy ASP.NET (VB)
W tym samouczku zobaczymy, jak wyświetlić przyjazny, informacyjny komunikat o błędzie, jeśli wystąpi wyjątek podczas operacji wstawiania, aktualizowania lub usuwania kontrolki sieci Web danych ASP.NET.
Wprowadzenie
Praca z danymi z aplikacji internetowej ASP.NET przy użyciu architektury aplikacji warstwowej obejmuje następujące trzy ogólne kroki:
- Określ, jaką metodę warstwy logiki biznesowej należy wywołać i jakie wartości parametrów mają zostać przekazane. Wartości parametrów można kodować, przypisywać programowo lub wprowadzać przez użytkownika.
- Wywołaj metodę .
- Przetwarzanie wyników. Podczas wywoływania metody BLL, która zwraca dane, może to obejmować powiązanie danych z kontrolką sieci Web danych. W przypadku metod BLL, które modyfikują dane, może to obejmować wykonywanie niektórych akcji na podstawie wartości zwracanej lub bezproblemowo obsługi wszelkich wyjątków, które powstały w kroku 2.
Jak pokazano w poprzednim samouczku, zarówno obiekt ObjectDataSource, jak i kontrolki sieci Web danych zapewniają punkty rozszerzalności dla kroków 1 i 3. Element GridView, na przykład, uruchamia zdarzenie RowUpdating
przed przypisaniem wartości pól do kolekcji objectDataSource. Zdarzenie RowUpdated
jest wywoływane po zakończeniu operacji objectDataSourceUpdateParameters
.
Przeanalizowaliśmy już zdarzenia uruchamiane w kroku 1 i zobaczyliśmy, jak można ich użyć do dostosowywania parametrów wejściowych lub anulowania operacji. W tym samouczku zwrócimy uwagę na zdarzenia, które są uruchamiane po zakończeniu operacji. Dzięki tym programom obsługi zdarzeń po poziomie możemy między innymi określić, czy wystąpił wyjątek podczas operacji i obsłużyć go w sposób bezproblemowy, wyświetlając przyjazny, informacyjny komunikat o błędzie na ekranie, a nie domyślnie na standardowej stronie wyjątku ASP.NET.
Aby zilustrować pracę z tymi zdarzeniami po poziomie, utwórzmy stronę zawierającą listę produktów w edytowalnym elemecie GridView. Podczas aktualizowania produktu, jeśli zostanie zgłoszony wyjątek, nasza strona ASP.NET wyświetli krótki komunikat powyżej kontrolki GridView wyjaśniający, że wystąpił problem. Zaczynamy!
Krok 1. Tworzenie edytowalnego elementu GridView produktów
W poprzednim samouczku utworzyliśmy edytowalny element GridView z zaledwie dwoma polami ProductName
i UnitPrice
. Wymaga to utworzenia dodatkowego przeciążenia ProductsBLL
dla metody klasy UpdateProduct
, która akceptowała tylko trzy parametry wejściowe (nazwa produktu, cena jednostkowa i identyfikator) w przeciwieństwie do parametru dla każdego pola produktu. W tym samouczku ponownie przećwiczmy tę technikę, tworząc edytowalny element GridView, który wyświetla nazwę produktu, ilość na jednostkę, cenę jednostkową i jednostki w magazynie, ale umożliwia edycję tylko nazwy, ceny jednostkowej i jednostek w magazynie.
Aby uwzględnić ten scenariusz, potrzebujemy innego przeciążenia UpdateProduct
metody, który akceptuje cztery parametry: nazwę produktu, cenę jednostkową, jednostki w magazynie i identyfikator. Dodaj następującą metodę do klasy ProductsBLL
:
<System.ComponentModel.DataObjectMethodAttribute _
(System.ComponentModel.DataObjectMethodType.Update, True)> _
Public Function UpdateProduct _
(ByVal productName As String, ByVal unitPrice As Nullable(Of Decimal), _
ByVal unitsInStock As Nullable(Of Short), ByVal productID As Integer) As Boolean
Dim products As Northwind.ProductsDataTable = _
Adapter.GetProductByProductID(productID)
If products.Count = 0 Then
Return False
End If
Dim product As Northwind.ProductsRow = products(0)
product.ProductName = productName
If Not unitPrice.HasValue Then
product.SetUnitPriceNull()
Else
product.UnitPrice = unitPrice.Value
End If
If Not unitsInStock.HasValue Then
product.SetUnitsInStockNull()
Else
product.UnitsInStock = unitsInStock.Value
End If
Dim rowsAffected As Integer = Adapter.Update(product)
Return rowsAffected = 1
End Function
Po zakończeniu tej metody możemy utworzyć stronę ASP.NET, która umożliwia edytowanie tych czterech konkretnych pól produktu. ErrorHandling.aspx
Otwórz stronę w folderze EditInsertDelete
i dodaj element GridView do strony za pośrednictwem Projektant. Powiąż element GridView z nowym obiektem ObjectDataSource, mapowanie Select()
metody na ProductsBLL
metodę klasy GetProducts()
i Update()
metodę na UpdateProduct
właśnie utworzone przeciążenie.
Rysunek 1. Użyj UpdateProduct
przeciążenia metody, które akceptuje cztery parametry wejściowe (kliknij, aby wyświetlić obraz pełnowymiarowy)
Spowoduje to utworzenie obiektu ObjectDataSource z kolekcją z UpdateParameters
czterema parametrami i kontrolką GridView z polem dla każdego pola produktu. Deklaratywny znacznik ObjectDataSource przypisuje OldValuesParameterFormatString
właściwość , original_{0}
która spowoduje wyjątek, ponieważ klasa BLL nie oczekuje przekazania parametru wejściowego o nazwie original_productID
. Nie zapomnij całkowicie usunąć tego ustawienia ze składni deklaratywnej (lub ustawić je na wartość domyślną). {0}
Następnie przeanalizuj widok GridView, aby uwzględnić tylko ProductName
pola , QuantityPerUnit
, UnitPrice
i UnitsInStock
BoundFields. Możesz również zastosować dowolne formatowanie na poziomie pola, które uważasz za konieczne (na przykład zmienianie HeaderText
właściwości).
W poprzednim samouczku przyjrzeliśmy się, jak sformatować pole UnitPrice
BoundField jako walutę zarówno w trybie tylko do odczytu, jak i w trybie edycji. Zróbmy to samo tutaj. Pamiętaj, że to wymagane ustawienie właściwości BoundField DataFormatString
na {0:c}
, jej HtmlEncode
właściwość false
na , i na ApplyFormatInEditMode
true
, jak pokazano na rysunku 2.
Rysunek 2. Konfigurowanie pola UnitPrice
ograniczenia do wyświetlania jako waluty (kliknij, aby wyświetlić obraz pełnowymiarowy)
UnitPrice
Formatowanie jako waluty w interfejsie edycji wymaga utworzenia procedury obsługi zdarzeń dla zdarzenia GridViewRowUpdating
, które analizuje ciąg sformatowany w walucie decimal
na wartość. Pamiętaj, że RowUpdating
procedura obsługi zdarzeń z ostatniego samouczka została również sprawdzona, aby upewnić się, że użytkownik podał UnitPrice
wartość. Jednak w tym samouczku pozwólmy użytkownikowi pominąć cenę.
Protected Sub GridView1_RowUpdating(ByVal sender As Object, _
ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) _
Handles GridView1.RowUpdating
If e.NewValues("UnitPrice") IsNot Nothing Then
e.NewValues("UnitPrice") = _
Decimal.Parse(e.NewValues("UnitPrice").ToString(), _
System.Globalization.NumberStyles.Currency)
End If
Nasz element GridView zawiera element QuantityPerUnit
BoundField, ale to pole powiązane powinno być przeznaczone tylko do celów wyświetlania i nie powinno być edytowalne przez użytkownika. Aby to rozmieścić, wystarczy ustawić właściwość BoundFields ReadOnly
na true
.
Rysunek 3. Ustaw QuantityPerUnit
Read-Only BoundField (Kliknij, aby wyświetlić obraz pełnowymiarowy)
Na koniec zaznacz pole wyboru Włącz edytowanie z tagu inteligentnego GridView. Po wykonaniu tych kroków ErrorHandling.aspx
Projektant strony powinny wyglądać podobnie do rysunku 4.
Rysunek 4. Usuń wszystko, ale wymagane pola ograniczenia i zaznacz pole wyboru Włącz edycję (kliknij, aby wyświetlić obraz pełnowymiarowy)
W tym momencie mamy listę wszystkich produktów ProductName
, QuantityPerUnit
, UnitPrice
i UnitsInStock
pól, jednak można edytować tylko ProductName
pola , UnitPrice
i UnitsInStock
.
Rysunek 5. Użytkownicy mogą teraz łatwo edytować nazwy, ceny i jednostki w polach zapasów (kliknij, aby wyświetlić obraz pełnowymiarowy)
Krok 2. Bezproblemowa obsługa wyjątków DAL-Level
Podczas gdy nasz edytowalny element GridView działa cudownie, gdy użytkownicy wprowadzają wartości prawne dla nazwy, ceny i jednostek edytowanego produktu w magazynie, wprowadzanie nielegalnych wartości powoduje wyjątek. Na przykład pominięcie ProductName
wartości powoduje zgłoszenie noNullAllowedException , ponieważ ProductName
właściwość w ProductsRow
klasie ma AllowDBNull
ustawioną false
właściwość na ; jeśli baza danych nie działa, SqlException
podczas próby nawiązania połączenia z bazą danych zostanie zgłoszony przez klasę TableAdapter. Bez podejmowania żadnych akcji te wyjątki są bąbelkowe z warstwy dostępu do danych do warstwy logiki biznesowej, a następnie do strony ASP.NET, a na końcu do środowiska uruchomieniowego ASP.NET.
W zależności od tego, jak aplikacja internetowa jest skonfigurowana i czy odwiedzasz aplikację z localhost
witryny , nieobsługiwany wyjątek może spowodować wyświetlenie ogólnej strony błędu serwera, szczegółowego raportu o błędach lub przyjaznej dla użytkownika strony internetowej. Zobacz Obsługa błędów aplikacji internetowej w ASP.NET i element customErrors , aby uzyskać więcej informacji na temat sposobu reagowania środowiska uruchomieniowego ASP.NET na nieumyślny wyjątek.
Rysunek 6 przedstawia ekran napotkany podczas próby zaktualizowania produktu bez określania ProductName
wartości. Jest to domyślny szczegółowy raport o błędach wyświetlany podczas przechodzenia przez program localhost
.
Rysunek 6. Pominięcie nazwy produktu spowoduje wyświetlenie szczegółów wyjątku (kliknij, aby wyświetlić obraz pełnowymiarowy)
Chociaż takie szczegóły wyjątku są przydatne podczas testowania aplikacji, prezentowanie użytkownika końcowego z takim ekranem w obliczu wyjątku jest mniejsze niż idealne. Użytkownik końcowy prawdopodobnie nie wie, co NoNullAllowedException
to jest lub dlaczego został spowodowany. Lepszym rozwiązaniem jest przedstawienie użytkownikowi bardziej przyjaznego dla użytkownika komunikatu wyjaśniającego, że wystąpiły problemy podczas próby zaktualizowania produktu.
Jeśli wystąpi wyjątek podczas wykonywania operacji, zdarzenia po poziomie zarówno w obiekcie ObjectDataSource, jak i kontrolce sieci Web danych zapewniają metodę wykrywania i anulowania wyjątku od bubbling do środowiska uruchomieniowego ASP.NET. W naszym przykładzie utwórzmy procedurę obsługi zdarzeń dla zdarzenia GridView RowUpdated
, które określa, czy wyjątek został wyzwolony, a jeśli tak, wyświetla szczegóły wyjątku w kontrolce Sieci Web etykiet.
Zacznij od dodania etykiety do strony ASP.NET, ustawienie jej ID
właściwości na ExceptionDetails
i wyczyszczenie jej Text
właściwości. Aby narysować oko użytkownika na ten komunikat, ustaw jego CssClass
właściwość na Warning
, która jest klasą CSS dodaną do Styles.css
pliku w poprzednim samouczku. Pamiętaj, że ta klasa CSS powoduje wyświetlanie tekstu etykiety w czerwonej, kursywie, pogrubionej, dodatkowej dużej czcionki.
Rysunek 7. Dodawanie kontrolki sieci Web etykiety do strony (kliknij, aby wyświetlić obraz pełnowymiarowy)
Ponieważ chcemy, aby ta kontrolka Sieci Web etykiet był widoczna tylko natychmiast po wystąpieniu wyjątku, ustaw jej Visible
właściwość na wartość false w procedurze obsługi zdarzeń Page_Load
:
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
ExceptionDetails.Visible = False
End Sub
W przypadku tego kodu podczas pierwszej wizyty na pierwszej stronie i kolejnych wycofań ExceptionDetails
kontrolka będzie miała właściwość Visible
ustawioną na false
wartość . W obliczu wyjątku na poziomie DAL lub BLL, który możemy wykryć w procedurze obsługi zdarzeń GridView RowUpdated
, ustawimy ExceptionDetails
właściwość kontrolki Visible
na true. Ponieważ programy obsługi zdarzeń kontroli sieci Web występują po Page_Load
obsłudze zdarzeń w cyklu życia strony, etykieta zostanie wyświetlona. Jednak w następnym poście zwrotnym Page_Load
program obsługi zdarzeń przywróci Visible
właściwość do false
, ukrywając ją ponownie przed widokiem.
Uwaga
Alternatywnie możemy usunąć konieczność ustawienia ExceptionDetails
właściwości kontrolki Visible
w Page_Load
programie, przypisując jej Visible
właściwość w składni deklaratywnej i wyłączając jej stan widoku (ustawiając EnableViewState
jej właściwość false
na false
). Użyjemy tego alternatywnego podejścia w przyszłym samouczku.
Po dodaniu kontrolki Etykieta następnym krokiem jest utworzenie procedury obsługi zdarzeń dla zdarzenia GridView RowUpdated
. Wybierz element GridView w Projektant, przejdź do okno Właściwości, a następnie kliknij ikonę błyskawicy, wyświetlając listę zdarzeń elementu GridView. Dla zdarzenia GridView RowUpdating
powinien już istnieć wpis, ponieważ utworzyliśmy procedurę obsługi zdarzeń dla tego zdarzenia wcześniej w tym samouczku. Utwórz również procedurę obsługi zdarzeń RowUpdated
dla zdarzenia.
Rysunek 8. Tworzenie procedury obsługi zdarzeń dla zdarzenia GridView RowUpdated
Uwaga
Program obsługi zdarzeń można również utworzyć za pomocą list rozwijanych w górnej części pliku klasy za kodem. Wybierz pozycję GridView z listy rozwijanej po lewej stronie i RowUpdated
zdarzenie po prawej stronie.
Utworzenie tej procedury obsługi zdarzeń spowoduje dodanie następującego kodu do klasy za pomocą kodu strony ASP.NET:
Protected Sub GridView1_RowUpdated(ByVal sender As Object, _
ByVal e As System.Web.UI.WebControls.GridViewUpdatedEventArgs) _
Handles GridView1.RowUpdated
End Sub
Drugi parametr wejściowy tego programu obsługi zdarzeń jest obiektem typu GridViewUpdatedEventArgs, który ma trzy właściwości interesujące dla obsługi wyjątków:
Exception
odwołanie do zgłaszanego wyjątku; jeśli nie zgłoszono wyjątku, ta właściwość będzie miała wartośćnull
ExceptionHandled
wartość logiczna wskazująca, czy wyjątek został obsłużony wRowUpdated
procedurze obsługi zdarzeń; jeślifalse
(wartość domyślna), wyjątek jest ponownie zgłaszany, powtarzając do środowiska uruchomieniowego ASP.NETKeepInEditMode
jeśli jest ustawionytrue
na edytowany wiersz GridView pozostaje w trybie edycji; jeślifalse
(wartość domyślna), wiersz GridView zostanie przywrócony do trybu tylko do odczytu
Nasz kod powinien sprawdzić, czy Exception
nie null
ma wartości , co oznacza, że podczas wykonywania operacji został zgłoszony wyjątek. Jeśli tak jest, chcemy:
- Wyświetlanie komunikatu przyjaznego dla użytkownika w etykiecie
ExceptionDetails
- Wskazuje, że wyjątek został obsłużony
- Zachowaj wiersz GridView w trybie edycji
Ten następujący kod realizuje następujące cele:
Protected Sub GridView1_RowUpdated(ByVal sender As Object, _
ByVal e As System.Web.UI.WebControls.GridViewUpdatedEventArgs) _
Handles GridView1.RowUpdated
If e.Exception IsNot Nothing Then
ExceptionDetails.Visible = True
ExceptionDetails.Text = "There was a problem updating the product. "
If e.Exception.InnerException IsNot Nothing Then
Dim inner As Exception = e.Exception.InnerException
If TypeOf inner Is System.Data.Common.DbException Then
ExceptionDetails.Text &= _
"Our database is currently experiencing problems." & _
"Please try again later."
ElseIf TypeOf inner _
Is System.Data.NoNullAllowedException Then
ExceptionDetails.Text += _
"There are one or more required fields that are missing."
ElseIf TypeOf inner Is ArgumentException Then
Dim paramName As String = CType(inner, ArgumentException).ParamName
ExceptionDetails.Text &= _
String.Concat("The ", paramName, " value is illegal.")
ElseIf TypeOf inner Is ApplicationException Then
ExceptionDetails.Text += inner.Message
End If
End If
e.ExceptionHandled = True
e.KeepInEditMode = True
End If
End Sub
Ta procedura obsługi zdarzeń rozpoczyna się od sprawdzenia, czy e.Exception
jest to null
. Jeśli tak nie jest, ExceptionDetails
właściwość Etykieta Visible
jest ustawiona na true
, a jej Text
właściwość ma wartość "Wystąpił problem podczas aktualizowania produktu". Szczegóły rzeczywistego wyjątku, który został zgłoszony, znajdują się we e.Exception
właściwości obiektu InnerException
. Ten wewnętrzny wyjątek jest badany i, jeśli jest to określony typ, dodatkowy, pomocny komunikat jest dołączany do ExceptionDetails
właściwości Etykieta Text
. ExceptionHandled
Na koniec właściwości i KeepInEditMode
są ustawione na true
wartość .
Rysunek 9 przedstawia zrzut ekranu tej strony podczas pomijania nazwy produktu; Rysunek 10 przedstawia wyniki podczas wprowadzania niedozwolonej UnitPrice
wartości (-50).
Rysunek 9. Pole ProductName
powiązane musi zawierać wartość (kliknij, aby wyświetlić obraz pełnowymiarowy)
Rysunek 10. Wartości ujemne UnitPrice
są niedozwolone (kliknij, aby wyświetlić obraz pełnowymiarowy)
Ustawiając e.ExceptionHandled
właściwość na true
, RowUpdated
program obsługi zdarzeń wskazał, że obsłużył wyjątek. W związku z tym wyjątek nie będzie propagowany do środowiska uruchomieniowego ASP.NET.
Uwaga
Na rysunkach 9 i 10 przedstawiono bezproblemowy sposób obsługi wyjątków zgłoszonych z powodu nieprawidłowych danych wejściowych użytkownika. Najlepiej jednak, aby takie nieprawidłowe dane wejściowe nigdy nie dotarły do warstwy logiki biznesowej, ponieważ strona ASP.NET powinna upewnić się, że dane wejściowe użytkownika są prawidłowe przed wywołaniem ProductsBLL
metody klasy UpdateProduct
. W następnym samouczku zobaczymy, jak dodać kontrolki weryfikacji do interfejsów edycji i wstawiania, aby upewnić się, że dane przesłane do warstwy logiki biznesowej są zgodne z regułami biznesowymi. Kontrolki sprawdzania poprawności nie tylko uniemożliwiają wywołanie UpdateProduct
metody, dopóki dane dostarczone przez użytkownika nie będą prawidłowe, ale także zapewniają bardziej informacyjne środowisko użytkownika do identyfikowania problemów z wprowadzaniem danych.
Krok 3. Bezproblemowa obsługa wyjątków BLL-Level
Podczas wstawiania, aktualizowania lub usuwania danych warstwa dostępu do danych może zgłosić wyjątek w obliczu błędu związanego z danymi. Baza danych może być w trybie offline, wymagana kolumna tabeli bazy danych może nie mieć określonej wartości lub ograniczenie na poziomie tabeli mogło zostać naruszone. Oprócz ściśle powiązanych z danymi wyjątków warstwa logiki biznesowej może używać wyjątków, aby wskazać, kiedy reguły biznesowe zostały naruszone. Na przykład w samouczku Tworzenie warstwy logiki biznesowej dodaliśmy sprawdzanie reguły biznesowej do oryginalnego UpdateProduct
przeciążenia. W szczególności, jeśli użytkownik oznaczył produkt jako wycofany, wymagamy, aby produkt nie był jedynym dostarczonym przez dostawcę. Jeśli ten warunek został naruszony, ApplicationException
został zgłoszony.
W przypadku przeciążenia utworzonego UpdateProduct
w tym samouczku dodajmy regułę biznesową, która uniemożliwia UnitPrice
ustawienie pola na nową wartość, która przekracza dwa razy oryginalną UnitPrice
wartość. Aby to osiągnąć, dostosuj UpdateProduct
przeciążenie, aby wykonało to sprawdzanie i zgłasza ApplicationException
błąd, jeśli reguła zostanie naruszona. Zaktualizowana metoda jest następująca:
<System.ComponentModel.DataObjectMethodAttribute _
(System.ComponentModel.DataObjectMethodType.Update, True)> _
Public Function UpdateProduct(ByVal productName As String, _
ByVal unitPrice As Nullable(Of Decimal), ByVal unitsInStock As Nullable(Of Short), _
ByVal productID As Integer) As Boolean
Dim products As Northwind.ProductsDataTable = Adapter.GetProductByProductID(productID)
If products.Count = 0 Then
Return False
End If
Dim product As Northwind.ProductsRow = products(0)
If unitPrice.HasValue AndAlso Not product.IsUnitPriceNull() Then
If unitPrice > product.UnitPrice * 2 Then
Throw New ApplicationException( _
"When updating a product price," & _
" the new price cannot exceed twice the original price.")
End If
End If
product.ProductName = productName
If Not unitPrice.HasValue Then
product.SetUnitPriceNull()
Else
product.UnitPrice = unitPrice.Value
End If
If Not unitsInStock.HasValue Then
product.SetUnitsInStockNull()
Else
product.UnitsInStock = unitsInStock.Value
End If
Dim rowsAffected As Integer = Adapter.Update(product)
Return rowsAffected = 1
End Function
Dzięki tej zmianie każda aktualizacja cen, która jest większa niż dwa razy, istniejąca cena spowoduje ApplicationException
zgłoszenie. Podobnie jak w przypadku wyjątku zgłoszonego z dal, można wykryć i obsłużyć tę ApplicationException
obsługę w procedurze obsługi zdarzeń usługi GridView RowUpdated
. W rzeczywistości kod programu obsługi zdarzeń, zgodnie z RowUpdated
zapisem, poprawnie wykryje ten wyjątek i wyświetli ApplicationException
wartość właściwości .Message
Rysunek 11 przedstawia zrzut ekranu, gdy użytkownik próbuje zaktualizować cenę Chai do 50,00 USD, czyli ponad dwukrotnie większą niż bieżącą cenę 19,95 USD.
Rysunek 11. Reguły biznesowe nie zezwalają na wzrost cen więcej niż dwukrotnie ceny produktu (kliknij, aby wyświetlić obraz pełnowymiarowy)
Uwaga
Najlepiej, aby nasze reguły logiki biznesowej zostałyby refaktoryzowane z UpdateProduct
przeciążeń metody i do wspólnej metody. Pozostawiono to jako ćwiczenie dla czytelnika.
Podsumowanie
Podczas wstawiania, aktualizowania i usuwania operacji zarówno kontrolka sieci Web danych, jak i obiekt ObjectDataSource obejmowały wyzwolenie zdarzeń wstępnych i po poziomie, które rezerwują rzeczywistą operację. Jak pokazano w tym samouczku i poprzednim, podczas pracy z edytowalnym elementem GridView wyzwalane jest zdarzenie GridView RowUpdating
, a następnie zdarzenie ObjectDataSource Updating
, w którym to momencie polecenie aktualizacji jest wykonywane do bazowego obiektu ObjectDataSource. Po zakończeniu operacji zdarzenie ObjectDataSource Updated
zostanie wyzwolone, a następnie zdarzenie GridView RowUpdated
.
Możemy utworzyć programy obsługi zdarzeń dla zdarzeń wstępnych w celu dostosowania parametrów wejściowych lub zdarzeń po poziomie w celu sprawdzenia i reagowania na wyniki operacji. Programy obsługi zdarzeń po poziomie są najczęściej używane do wykrywania, czy wystąpił wyjątek podczas operacji. W obliczu wyjątku te programy obsługi zdarzeń po poziomie mogą opcjonalnie obsługiwać wyjątek samodzielnie. W tym samouczku pokazano, jak obsłużyć taki wyjątek, wyświetlając przyjazny komunikat o błędzie.
W następnym samouczku zobaczymy, jak zmniejszyć prawdopodobieństwo wyjątków wynikających z problemów z formatowaniem danych (na przykład wprowadzenie ujemnego UnitPrice
). W szczególności przyjrzymy się sposobom dodawania kontrolek walidacji do interfejsów edycji i wstawiania.
Szczęśliwe programowanie!
Informacje o autorze
Scott Mitchell, autor siedmiu książek ASP/ASP.NET i założyciel 4GuysFromRolla.com, współpracuje z technologiami internetowymi firmy Microsoft od 1998 roku. Scott pracuje jako niezależny konsultant, trener i pisarz. Jego najnowsza książka to Sams Teach Yourself ASP.NET 2.0 w ciągu 24 godzin. Można do niego dotrzeć pod adresem mitchell@4GuysFromRolla.com. Lub za pośrednictwem swojego bloga, który można znaleźć na stronie http://ScottOnWriting.NET.
Specjalne podziękowania
Ta seria samouczków została sprawdzona przez wielu pomocnych recenzentów. Główny recenzent tego samouczka to Liz Shulok. Chcesz przejrzeć nadchodzące artykuły MSDN? Jeśli tak, upuść mi wiersz pod adresem mitchell@4GuysFromRolla.com.