Technologie internetowe Wykład 7 Kontrola danych użytkownika
Rodzaje błędów Błąd kompilacji Błąd wykonania Błąd logiczny
Błąd komplikacji 1:int a=5; 2:a+="cm”; Linia 2: Nie można przekonwertować typu „string” na „int”.
Błąd wykonania protected void btnOblicz_Click(object sender, EventArgs e) { int litry = Convert.ToInt32(txtIlePaliwa.Text); int km = Convert.ToInt32(txtIleKilometrow.Text); int zuzycie = 100*litry / km; lblZuzycie.Text = zuzycie.ToString(); } Zatankowano [litry] Przejechano [km] [litrów/100km]
Błąd loginczny void PiszPoleWalca() { double promien = 3; double wysokosc = 2; double poleWalca = 2 * Math.PI * promien * h; Response.Write("Całkowite pole powierzchni walca:" + poleWalca.ToString("F2")); }
Wyjątki Mechanizm przepływu sterowania występujący we współczesnych językach programowania służący do obsługi zdarzeń wyjątkowych (w szczególności błędów wykonania).
Przyczyny wyjątków Błędne dane użytkownika Brak dostępu do pliku Problem z nawiązaniem połączenia (np. z serwerem bazodanowym) Przekroczenie indeksu tablicy, kolekcji Niewystarczające uprawnienia kodu
Obsługa wyjątków w C# try { // blok, w którym może wystąpić wyjątek } catch (klasa_wyjątku obiekt_wyjątku { // blok wykonywany w ramach obsługi wyjątku } finally { // blok zawsze wykonywany, niezależnie od wystąpienia wyjątku }
Hierarchia wyjątków.NET Exception AppliactionException SystemException ArthmeticException DivideByZeroException NotFiniteNumberException OverflowException FormatException Ponad 100 wyjątków….
protected void btnOblicz_Click(object sender, EventArgs e) { try { int litry = Convert.ToInt32(txtIlePaliwa.Text); int km = Convert.ToInt32(txtIleKilometrow.Text); int zuzycie = 100 * litry / km; lblZuzycie.Text = zuzycie.ToString(); } catch (FormatException w) { lblZuzycie.Text = " Błędny format danej "; } catch (DivideByZeroException w) { lblZuzycie.Text = " Dystans równy 0 "; } catch (Exception w) { lblZuzycie.Text = " Zgłoś błąd administratorowi: " + w.Message; } finally { lblZuzycie.BackColor = System.Drawing.Color.Yellow; } } Zatankowano [litry] Przejechano [km] [litrów/100km] Wyjątki obsługujemy od najbardziej szczegółowego do najogólniejszego !
Przekazywanie wyjątków int Iloraz(int a, int b) { return (a/b); } int Zuzycie (int paliwo, int km) { return 100*Iloraz(paliwo,km); } void btnObliczClick (object s, EventArgs e) { lblWynik.Text=Zuzycie(30,0).ToString(); } INTERFEJS Wywołanie Wyjątek
Wyjątki w JavaScript Kalkulator function Oblicz() { try { var wynik = eval(document.getElementById("txtWyr").value); document.getElementById("lblWynik").innerHTML = wynik; } catch (w) { alert(w.message); } finally { document.getElementById("lblWynik").style.backgroundColor = "yellow"; } } Wyrażenie
Walidatory Kontrolki nadzorujące zawartość innych kontrolek (zwykle TextBox) Jeżeli którykolwiek walidator wykryje problem blokuje akcje inicjowaną np. przyciskiem Buttton i wyświetla komunikat Funkcjonalność walidatorów może być realizowana po stronie serwerowej i/lub klienckiej
Właściwości walidatorów ControlToValidate – wskazuje, która kontrolka jest nadzorowana Text – informacja o błędzie wyświetlana bezpośrednio przez walidator ErrorMessage – informacja o błędzie wyświetlana w podsumowaniu walidacji Display – decyduje, czy nieaktywny walidator zajmuje miejsce (wartość Static) lub całkowicie znika Dynamic. ValidationGroup – grupa kontrolek podlegających pojedynczej walidacji EnableClientScript – wykorzystanie skryptów klienckich do walidacji SetFocusOnError – automatyczne przejście do edycji nadzorowanej kontrolki w chwili wystąpienia błędu
RequiredFieldValidator <asp:TextBox ID="txtPromien” runat="server” <asp:RequiredFieldValidator ID="rfvPromien" runat="server" ControlToValidate="txtPromien" Text="Nie podałeś promienia" /> Sprawdza, czy w polu wpisano jakąkolwiek wartość. Właściwość InitialValue pozwala przedefiniować wartość początkową. Uwaga ! Pozostałe walidatory aktywują się tylko w wypadku wprowadzenia jakiejś wartości do kontrolki nadzorowanej. Z tego powodu można uznać RequiredFieldValidator za walidator obowiązkowy.
RangeValidator Wartość poza zakresem. Sprawdza, czy wartość w polu mieści się w zakresie. Typ wartości decyduje o poprawnym porównaniu z zakresem MinimumValue - MaximumValue Double, IntegerString 10>210<2
CompareValdiator Porównuje wartość pola z wartością lub z innym polem. <asp:CompareValidator ID="cvPromien" runat="server" ControlToValidate="txtPromien" Operator="GreaterThan" Type="Double" ValueToCompare="0">Promień musi być większy od zera. Porównanie z wartością Porównywana wartość Sposób porównania <asp:CompareValidator ID="cvPromien" runat="server" ControlToValidate="txtPromien" Operator="LessThanEqual" Type="Double" ControlToCompare="txtWysokosc">Promień musi być nie większy niż wysokość. Kontrolka porównywana Kontrolka sprawdzana
CompareValidator – kontrola formatu danej <asp:CompareValidator ID="cvDana" runat="server" ControlToValidate="txtDana" Operator="DataTypeCheck" Type="Integer">Zła typ danej. Operator DataTypeCheck sprawdza, czy dana w kontrolce nadzorowanej może zostać przekonwertowana do typu określonego w Type.
ReqularExpressionValidator Sprawdza, czy wartość w pisana w polu ma wymagany format. <asp:RegularExpressionValidator ID="revPoczta" runat="server" ControlToValidate="txtPoczta" Podaj poprawny adres pocztowy Właściwość ValidationExpression zawiera wyrażenie regularne opisujące wymagany format tekstu – tutaj adresu owego. Uwaga ! Wyrażenie automatycznie jest uzupełniane o symbole początku i końca tekstu ^.. $.
CustomValidator Walidator pozwalający wprowadzić własny kod sprawdzający po stronie serwera (zdarzenie ServerValidate) i klient (właściwość ClientValidationFunction) <asp:CustomValidator ID="cvPromien" runat="server" OnServerValidate="cvPromien_ServerValidate" ClientValidationFunction="SprawdzPromien” ControlToValidate="txtPromien"> Zła dana protected void cvPromien_ServerValidate(object source, ServerValidateEventArgs args) { if (args.Value.Length > 5) args.IsValid = true; else args.IsValid = false; } function SprawdzPromien(source, args) { if (args.Value.length > 5) args.IsValid = true; else args.IsValid = false; }
Walidacja po stronie klienta Oparta o skrypt kliencki JavaScript Natychmiastowa informacja o błędzie Brak przeładowania strony Brak działania w wypadku wyłączenia skryptów klienckich
Walidacja po stronie serwera Oparta o skrypt serwerowy Zawsze realizowana Wymaga sprawdzenia właściwości strony IsValid prawdziwej, gdy nie aktywował się żaden walidator Wymaga przeładowania strony
protected void btnObliczPole_Click(object sender, EventArgs e) { if (IsValid) lblPole.Text = (Convert.ToDouble(txtWysokosc.Text) * Convert.ToDouble(txtSzerokosc.Text)).ToString("F2"); } Prostokąt Wysokość <asp:RequiredFieldValidator ID="rfvWysokosc" runat="server" ControlToValidate="txtWysokosc">Brak wysokości. <asp:CompareValidator ID="CompareValidator1" runat="server" ControlToValidate="txtWysokosc" Operator="GreaterThan" Type="Double" ValueToCompare="0">Zła wysokość. Szerokość <asp:RequiredFieldValidator ID="rfvSzerokosc" runat="server" ControlToValidate="txtSzerokosc" Display="Dynamic">Brak szerokości. <asp:RegularExpressionValidator ID="revSzerokosc" runat="server" ControlToValidate="txtSzerokosc" ValidationExpression="\d*[0248]">Szerokość nieparzysta. <asp:Button ID="btnObliczPole" runat="server" onclick="btnObliczPole_Click" Text="Oblicz" /> <asp:Label ID="lblPole" runat="server" BackColor="#3399FF" Text="0" Width="150px">
Komunikacja błędu inna niż tekst. Wartość poza zakresem.. Tekst Obrazek
ValidationSummary Kontrolka zawierająca spis wszystkich błędów (ErrorMessage) wygenerowanych przez walidatory z tej samej grupy (ValidtionGroup) <asp:RangeValidator ID="RangeValidator1" runat="server" ControlToValidate="txtPromien" ErrorMessage="Zly promeń" MaximumValue="10" MinimumValue="0" Type="Double">Podaj promień od 0 do 10 Wysokość <asp:RangeValidator ID="rvWysokość" runat="server" ControlToValidate="txtWyskość" ErrorMessage="Zła wysokość" MaximumValue="15" MinimumValue="5" Type="Double"> Podaj wysokość 5 do 15 Właściwości: ShowMessageBox ShowSummary
Grupa walidacyjna Właściwość ValidationGroup posiadają: kontrolki walidatorów kontrolka podsumowania walidacji kontrolki powodujące inicjujące akcje i przeładowanie strony: przyciski Button, LinkButton, ImageButton listy ListBox, DropDownList, CheckBoxList, RadioButtonList pola RadioButton, CheckBox Właściwość ValidationGroup pozwala rozdzielić stronę na niezależnie sprawdzane sekcje
Grupy walidacyjne - przykład
Kontrola danych Walidacja po stronie klienckiej Walidacja po stronie serwerowej Własna logika sprawdzania Obsługa wyjątków
Literatura M. Mysior: Wprowadzenie do ASP.NET 2.0. Ćwiczenia praktyczne, NAKOM 2008 MCTS Self-Paced Training Kit (Exam ): Microsoft.NET Framework ASP.NET
KONIEC