I denna artiklel tänkte jag ta upp de valideringskontroller som finns i .NET och visa exempel på hur dessa används. I tabellen nedan så listas alla valideringskontroller och deras funktion.
RequiredFieldValidator
Denna kontrollerar så att fältet verkligen innehåller något
CompareValidator
Jämför det inmatade värdet antingen mot ett statiskt värde eller mot en annan kontrolls värde.
RangeValidator
Kontrollerar så att ett värde befinner sig inom ett visst intervall. Det som går att jämföra är siffror, bokstäver och datum.
RegularExpressionValidator
Låter dig använda ett reguljärt uttryck för att kontrollera innehållet som användaren matar in. Observera att denna kontroll inte kan validera tomma inmatningar, utan då måste man använda en RequiredFieldValidator tillsammans med RegularExpressionValidator.
CustomValidator
Låter dig själv skapa logiken för valideringen
ValidationSummary
Denna kontroll utför ingen validering i sig, utan samlar alla kontrollers resultat i en sammanfattning.
Detta var de kontroller som finns. En sak som är bra att veta med kontrollerna är att de alltid utför server-side validering, samt client-side validering om klientens browser kan hantera DHTML.
Det var en snabb sammanfattning av de valideringskontroller som vi har till hands att arbeta med, nu är det dags att visa hur det går till att använda dessa. Vi börjar med att dra ut några textboxar samt en knapp, se exempel nedan.
Förnamn: <asp:TextBox runat="server" ID="txbFname"></asp:TextBox>
<br />
Efternamn: <asp:TextBox runat="server" ID="txbLname"></asp:TextBox>
<br />
E-post: <asp:TextBox runat="server" ID="txbEmail"></asp:TextBox>
<br />
Ålder: <asp:TextBox runat="server" ID="txbAge"></asp:TextBox>
<br />
<asp:Button runat="server" ID="btnValidate" Text="Validera"></asp:Button>
Detta var vårat grundformulär som vi kommer att utföra våran validering mot. Nästa steg är att dra ut några valideringskontroller, och de vi ska använda i detta exempel är tre stycken RequiredFieldValidator, en RegularExpressionValidator, CompareValidator, RangeValidator. Var du lägger dessa kontroller spelar ingen roll, jag brukar lägga de valideringskontroller som hör till en kontroll under denna eller så samlar jag alla valideringskontroller under alla inmatningsfält. När vi har dragit ut våra valideringskontroller så kommer vårat formulär att se ut något i stil med. Med detta kontroller på plats kan det se lite grötigt ut, se exempel nedan.
Förnamn: <asp:TextBox runat="server" ID="txbFname"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvFname" runat="server" ControlToValidate="txbFname"
ErrorMessage="Du måste ange ditt förnamn"></asp:RequiredFieldValidator>
<br />
Efternamn: <asp:TextBox runat="server" ID="txbLname"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvLname" runat="server" ControlToValidate="txbLname"
ErrorMessage="Du måste ange ditt efternamn"></asp:RequiredFieldValidator>
<br />
E-post: <asp:TextBox runat="server" ID="txbEmail"></asp:TextBox>
<asp:RegularExpressionValidator ID="rxvEmail" runat="server" ControlToValidate="txbEmail"
ValidationExpression=".*@.*\..*" ErrorMessage="Ogiltig e-postadress">
</asp:RegularExpressionValidator>
<asp:RequiredFieldValidator ID="rfvEmail" runat="server" ControlToValidate="txbEmail"
ErrorMessage="Du måste ange en e-postadress"></asp:RequiredFieldValidator>
<br />
Ålder :<asp:TextBox runat="server" ID="txbAge"></asp:TextBox>
<asp:CompareValidator ID="cvAge" runat="server" ControlToValidate="txbAge" ValueToCompare="23"
ErrorMessage="Du är inte lika gammal som Reager"></asp:CompareValidator>
<asp:RangeValidator ID="rvAge" runat="server" ControlToValidate="txbAge" MinimumValue="15"
MaximumValue="25" ErrorMessage="Du måste vara mellan 15 och 25 år"></asp:RangeValidator>
<asp:Button runat="server" ID="btnValidate" Text="Validera"></asp:Button>
Jag ska nu ta upp de egenskaper som är gemensamma för samtliga av dessa valideringskontroller
ControlToValidate - Den kontroll som vi ska utföra valideringen mot.
ErrorMessage - Det meddelande som skall skrivas ut om valideringen misslyckas.
ValidationGroup - Låter dig skapa "grupper" som kan valideras var för sig. Sätts både på valideringskontrollen samt kontrollen som valideras.
SetFocusOnErrror - Sätter fokus på kontrollen om valideringen misslyckas.
Display - Talar om hur kontrollen skall visas. (none - visar inget, bra tillsammans med validationsummary, static - visar meddelande vid fel reserverar plats på sidan,
dynamic - visar felmeddelande, men reserverar ingen plats på sidan).
EnableClientScript - Sätts till false om du inte vill ha validering hos klienten
Sedan så har vaje kontroll sina egna unika egenskaper.
RequiredFieldValidator
InitialValue - Om den kontroll som skall valideras har ett default-värde kan du ange det här så att valideringen misslyckas om det är samma värde när valideringen körs.
RegularExpressionValidator
ValidationExpression - Det reguljära uttryck som skall användas vid valideringen
CompareValidator
ValueToCompare - Detta anges om du vill jämföra med ett statiskt värde
ControlToCompare - Om du istället vill jämföra mot en annan kontroll använder du denna tillsammans med kontrollens ID
Operator - Används för att tala om på vilket sätt du vill jämföra de två värdena
RangeValidator
MaximumValue - Det största värde som den validerade kontrollen får ha
MinimumValue - Det minsta värde som kontrollen får ha
Type - Vilken typ av värde det är som matas in (currency, double, integer, string, date)
Det var ett litet exempel med de fyra av valideringskontrollerna, och jag tänkte göra ett eget litet åt CustomValidator. I detta exempel, som ska göras på samma sida som föregående exempel så kommer jag också att skapa en egen ValidationGroup så att det formuläret kan valideras för sig självt. Allt vårat nästa exempel ska innehålla är en textbox, en knapp och en CustomValidator.
Är Reager bäst? (ja) <asp:TextBox runat="server" ID="txbCustom" ValidationGroup="Custom">
</asp:TextBox>
<br />
<asp:Button runat="server" ID="btnCustom" Text="Validera (Custom)" ValidationGroup="Custom" />
<asp:CustomValidator ID="csmvCustom" runat="server" ControlToValidate="txbCustom"
ErrorMessage="Fel svar" OnServerValidate="Validate" ValidationGroup="Custom">
</asp:CustomValidator>
Nästa steg är att skapa våran valideringslogik. Egenskapen OnServerValidate bestämmer vad denna metod skall heta, och som ni ser så har jag valt att kalla min för valideta. Hoppa till kod-läget och skapa en metod som ser som nedan.
protected void Validate(object sender, ServerValidateEventArgs se)
{
// Vi utför server-validering, och kontrollerar om värdet som matats in
// är ja
se.IsValid = se.Value.Equals("ja");
}
Det enda denna gör är att sätter valideringen som OK om det inmatade värdet är "ja".
Om du nu provar att validera så kommer du att se att den klagar om man matar in ett annat värde än "ja". Vi ska göra lika här och ta upp de unika egenskaperna för CustomValidator. Du märker också att den inte klagar på något i det övre formuläret när du postar det nedre, detta tack vare ValidationGroup, som gör att man kan ha flera grupper av kontroller som valideras av olika knappar.
CustomValidator
ClientValidationFunction - Om du även vill validera på klienten så anger du namnet på metoden som används till detta
ValidateEmptyText - Sätts till true om du vill validera även om ingen inmatning sker.
Det sista vi ska göra är att lägga till en ValidationSummary till det övre samlingen av kontroller. Denna kan du lägga var du vill, jag väljer att lägga den under min knapp. Sedan sätter du en ValidationGroup på samtliga kontroller som hör till det övre formuläret. Visar en liten del nedan.
Ålder :<asp:TextBox runat="server" ID="txbAge" ValidationGroup="validate"></asp:TextBox>
<asp:CompareValidator ID="cvAge" runat="server" ControlToValidate="txbAge" ValueToCompare="23"
ErrorMessage="Du är inte lika gammal som Reager" ValidationGroup="validate">
</asp:CompareValidator>
<asp:RangeValidator ID="rvAge" runat="server" ControlToValidate="txbAge" MinimumValue="15"
MaximumValue="25" ErrorMessage="Du måste vara mellan 15 och 25 år" ValidationGroup="validate">
</asp:RangeValidator>
<asp:Button runat="server" ID="btnValidate" Text="Validera" ValidationGroup="validate">
</asp:Button>
<asp:ValidationSummary ID="ValidationSummary1" runat="server" ValidationGroup="validate" />
När du nu provar att validera så kommer det att skrivas ut en lista på de fel som uppstått. Om du bara vill ha listan, men inte att texten även skall skrivas ut av valideringskontrollerna så sätter du Display="None" på samtliga valideringskontroller. Vår vana trogen skall vi lista alla unika egenskaper för ValidationSummary nedan.
ValidationSummary
DisplayMode - Hur sammanfattningen skall visas (bulletlist, list, singleparagraph)
HeaderText - Rubriken på sammanfattningen
ShowMessageBox - Sätts till true om vi vill att sammanfattningen skall visas i en javascript-alert
ShowSummary - Talar om huruvida vi vill visa vår sammanfattning
En demo finns här: http://aspdotnet.nu/upload/demo/ValidationControls/
Det var valideringskontroller i ett nötskal, vill du ha mer information så finns det massor på nätet. Lycka till.