در این بخش به بررسی سایر کنترل های validation خواهیم پرداخت .
کنترل <asp:CompareValidator>
کنترل فوق مسئولیت بررسی‌ مقدار درج شده در یک TextBox را برعهده دارد . بدین منظور داده ورودی با یک مقدار خاص و یا مقدار یک کنترل موجود بر روی فرم مقایسه می گردد . نوع داده درج شده در TextBox می تواند از نوع Currency ، Date ، اعشاری ، صحیح و یا رشته ( مقدار پیش فرض ) باشد .

شکل عمومی
شکل عمومی کنترل فوق به صورت زیر است :
کد:
 
<asp:CompareValidator id="id" Runat="Server" ControlToCompare="controlID" ControlToValidate="controlID" Display="Dynamic|None|Static" ErrorMessage="string" Operator="Equal|NotEqual|GreaterThan|GreaterThanEqual|LessThan |LessThanEqual|DataTypeCheck" SetFocusOnError="False|True" Type="Currency|Date|Double|Integer|String" ValidationGroup="name" ValueToCompare="value" />
توضیحات
  • از یک id صرفا" زمانی استفاده می شود که قرار است به کنترل از طریق اسکریپپ مراجعه گردد .
    به خصلت ControlToValidate ، مقدار id کنترل textBox که مسئولیت بررسی آن به کنترل <asp:CompareValidator> واگذار شده است ،‌نسبت داده می شود.
    خصلت ErrorMessage ، پیام مورد نظر در صورت بروز خطاء را مشخص می نماید .
    خصلت SetFocusOnErrorMessage ، یک blinking cursor را در کنترل TextBox مربوطه به منظور تسهیل در امر درج داده جدید قرار می دهد .
    خصلت ValidationGroup یک گروه از کنترل های TextBox را که مجموعه ای از تست های بررسی روی آنها اعمال خواهد شد ، مشخص می نماید (در مواردی که دکمه های متفاوت می توانند باعث فعال شدن تست های مختلفی گردند ) .
    خصلت Display : کنترل <asp:CompareValidator> ، یک فضای افقی را متناسب با طول رشته مربوط به پیام خطاء اشغال خواهد کرد . در اغلب موارد ، پیام خطاء در کنار TextBox مربوطه نمایش داده می شود . مکان فوق بر روی صفحه همواره نشان داده خواهد شد ( ولو این که خطائی اتفاق نیافتد ) . در صورتی که مقدار خصلت Display معادل Dynamic در نظر گرفته شود ، مکانی برای نمایش پیام خطاء رزو نخواهد شد و بطور پویا و همزمان با بروز خطاء ایجاد می گردد .
    مقدار ورودی می تواند با یک مقدار مشخص شده توسط خصلت ValueToCompare و یا مقدار یک کنترل دیگر موجود در صفحه ( مشخص شده توسط خصلت ControlToCompare ) ، مقایسه گردد . به صورت پیش فرض ، عملیات مقایسه برای "برابری " انجام خواهد شد . در صورت نیاز می توان از سایر عملگرهای مقایسه ای که توسط خصلت Operator مشخص می گردند ، استفاده نمود . عملیات مقایسه بر اساس نوع داده درج شده در Textbox که توسط خصلت Type مشخص می گردد ، انجام خواهد شد .
  • خصلت Type : در صورتی که نوع داده ورودی مشخص نگردد ،‌ نوع آن به صورت پیش فرض string در نظر گرفته خواهد شد . یک TextBox خالی ، به عنوان یک نوع داده معتبر ارزیابی خواهد شد . بنابراین ، لازم است که به همراه کنترل <asp:CompareValidator> از یک کنترل RequiredFieldValidator نیز استفاده گردد تا این اطمینان حاصل شود که با عدم درج داده در TextBox مربوطه با آْن به عنوان یک داده معتبر برخورد نخواهد شد .

مثال
در این مثال ، کاربر می بایست یک عدد مثبت را وارد نماید و در صورتی که مقدار ورودی منفی باشد یک پیام خطاء نمایش داده می شود . به همراه کنترل CompareValidator از یک کنترل RequiredFieldValidator نیز استفاده شده است تا عدم درج داده ( خالی‌بودن ) به عنوان یک داده معتبر ارزیابی نگردد .
مقدار ورودی می بایست از نوع اعشاری (Type=Double ) و بزرگتر از (Operator=GreaterThan ) صفر (ValueToCompare=0 ) باشد تا به عنوان یک داده معتبر ارزیابی گردد .
کد:
 
<SCRIPT Runat="Server"> Sub Get_Data (Src As Object, Args As EventArgs) Output.Text = "You entered '" & MyTextBox.Text & "'" End Sub </SCRIPT> <form Runat="Server"> Enter a positive number:<br/> <asp:TextBox id="MyTextBox" Runat="Server"/> <asp:Button Text="Submit" OnClick="Get_Data" Runat="Server"/> <asp:CompareValidator Runat="Server" ControlToValidate="MyTextBox" ValueToCompare="0" Type="Double" Operator="GreaterThan" ErrorMessage="Please enter a number greater than 0" Display="Dynamic" SetFocusOnError="True"/> <asp:RequiredFieldValidator Runat="Server" ControlToValidate="MyTextBox" ErrorMessage="Please enter a data value" Display="Dynamic" SetFocusOnError="True"/> <asp:Label id="Output" Runat="Server"/> </form>
کنترل <asp:CustomValidator>در زمان بررسی و ارزیابی داده ورودی ممکن است به مواردی برخورد نمائیم که با ترکیب یک RequiredFieldValidator ، RangeValidator و یا CompareValidator خواسته ما تامین نگردد. در چنین مواردی می توان از کنترل <asp:CustomValidator> به منظور انجام تست های اضافه استفاده نمود .
شکل عمومی
شکل عمومی کنترل فوق به صورت زیر است :
کد:
 
<asp:CustomValidator id="id" Runat="Server" ControlToValidate="controlID" Display="Dynamic|None|Static" ErrorMessage="string" SetFocusOnError="False|True" ValidationGroup="name" OnServerValidate="subprogram" />
توضیحات
  • خصلت های کنترل <asp:CustomValidator> مشابه سایر کنترل های validation می باشند با این تفاوت که از خصلت OnServerValidate به منظور فراخوانی یک برنامه فرعی برای بررسی و ارزیابی داده ورودی نیز استفاده می گردد .
    یک TextBox خالی به عنوان یک داده معتبر در نظر گرفته خواهد شد . بنابراین می بایست به همراه کنترل CustomValidator از یک کنترل RequiredFieldValidator نیز استفاده گردد تا عدم درج داده به عنوان یک داده معتبر ارزیابی نگردد .
    برنامه فرعی صدا زده شده دارای آرگومان های خاص ServerValidateArgs می باشد . در صورتی که بررسی و ارزیابی صحت داده ورودی توام با موفقیت نباشد ، مقدار خصلت IsValid معادل false خواهد شد . از آرگومان Value ، به عنوان مرجعی به منظور مراجعه به مقدار TextBox ( کنترل مشخص شده توسط خصلت ControlToValidate ) استفاده می گردد .
    خصلت ErrorMessage ، پیام مورد نظر در صورت بروز خطاء را مشخص می نماید .
    خصلت SetFocusOnErrorMessage ، یک blinking cursor را در کنترل TextBox مربوطه به منظور تسهیل در امر درج داده جدید قرار می دهد .
    خصلت ValidationGroup یک گروه از کنترل های TextBox را که مجموعه ای از تست های بررسی روی آنها اعمال خواهد شد ، مشخص می نماید (در مواردی که دکمه های متفاوت می توانند باعث فعال شدن تست های مختلفی گردند ) .
  • خصلت Display : کنترل <asp:CustomValidator> ، یک فضای افقی را متناسب با طول رشته مربوط به پیام خطاء اشغال خواهد کرد . در اغلب موارد ، پیام خطاء در کنار TextBox مربوطه نمایش داده می شود . مکان فوق بر روی صفحه همواره نشان داده خواهد شد ( ولو این که خطائی اتفاق نیافتد ) . در صورتی که مقدار خصلت Display معادل Dynamic در نظر گرفته شود ، مکانی برای نمایش پیام خطاء رزو نخواهد شد و بطور پویا و همزمان با بروز خطاء ایجاد می گردد .

مثال
در این مثال به منظور ارزیابی و تست داده ورودی در یک TextBox از دو کنترل CustomValidator و RequiredFieldValidator استفاده شده است . داده ورودی می بایست یک عدد صحیح بین صفر تا نود و نه باشد .
پس از کلیک بر روی دکمه Submit ، روتین Get_Data فعال و قبل از هر چیز عملیات بررسی و ارزیابی صحت داده ورودی انجام خواهد شد . کنترل RequiredFieldValidator در ابتدا بررسی لازم در خصوص درج داده در TextBox را انجام و در ادامه روتین Validate_TextBox توسط خصلت OnServerValidate کنترل CustomValidator فراخوانده می شود . روتین فوق ، تست های لازم را بر روی داده ورودی انجام خواهد داد ( برای مراجعه به داده ورودی از Args.Value استفاده شده است ) . در صورتی که هر یک از تست های انجام شده توام با موفقیت نباشد ، خصلت Args.Isvalid مقدار false را خواهد گرفت ( داده ورودی می بایست یک عدد مثبت بین صفر تا نود و نه باشد ) .
پس از انجام فرآیند بررسی داده ورودی ، روتین Get_Data ، اجرا خواهد شد . روتین فوق در ابتدا و پس از کلیک بر روی دکمه button فراخوانده می گردد و اجرای آن تا زمانی که عملیات بررسی و ارزیابی داده ورودی به اتمام نرسیده باشد ، به تاخیر خواهد افتاد . پردازش های انجام شده در روتین Get_Data مشروط به انجام موفقیت آمیز تست ارزیابی و صحت داده است . بنابراین ، همه چیز وابسته به شرط Page.IsValid شده است و در صورتی که Args.IsValid معادل false شده باشد ، مقدار Page.IsValid نیز false خواهد شد.
کد:
<SCRIPT Runat="Server"> Sub Validate_TextBox (Src As Object, Args As ServerValidateEventArgs) If Not IsNumeric(Args.Value) Then MyValidator.ErrorMessage = "Please enter a number" Args.IsValid = False Else If Not Args.Value Mod 1 = 0 Then MyValidator.ErrorMessage = "Please enter an integer" Args.IsValid = False End If If Args.Value < 0 Then MyValidator.ErrorMessage = "Please enter a positive integer" Args.IsValid = False End If If Args.Value > 99 Then MyValidator.ErrorMessage = "Please enter a positive integer between 0 and 99" Args.IsValid = False End If End If End Sub Sub Get_Data (Src As Object, Args As EventArgs) If Page.IsValid Then Output.Text = "You entered '" & MyTextBox.Text & "'" End If End Sub </SCRIPT> <form Runat="Server"> Enter a positive integer:<br/> <asp:TextBox id="MyTextBox" Runat="Server"/> <asp:Button Text="Submit" OnClick="Get_Data" Runat="Server"/> <asp:CustomValidator id="MyValidator" Runat="Server" ControlToValidate="MyTextBox" Display="Dynamic" SetFocusOnError="True" OnServerValidate="Validate_TextBox"/> <asp:RequiredFieldValidator Runat="Server" ControlToValidate="MyTextBox" ErrorMessage="Please enter a data value" Display="Dynamic" SetFocusOnError="True"/> <asp:Label id="Output" Runat="Server"/> </form>