CompareValidator Required RequiredFieldValidator
נניח שיש לכם את הקוד הבא:
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ErrorMessage="RequiredFieldValidator"
ControlToValidate="TextBox1"></asp:RequiredFieldValidator>
<asp:CompareValidator ID="CompareValidator1" runat="server"
ErrorMessage="CompareValidator"
ControlToValidate="TextBox2" ControlToCompare="TextBox1">
שני תיבות טקסט.
RequiredFieldValidator על התיבה הראשונה
ו CompareValidator על תיבת הטקסט השנייה.
נניח שנכניס ערך כלשהו לתיבת הטקסט הראשונה, ולא נכניס שום ערך לתיבת הטקסט השנייה. כשננסה לרוץ לשרת, נצפה לכאורה לקבל הודעת שגיאה שהערכים של שני תיבות הטקסט לא מתאימים, לא ?
אז התשובה היא שלא נקבל שום הודעת שגיאה,
רק במידה ונכניס ערך שונה לתיבת הטקסט השנייה מהערך של תיבת הטקסט הראשונה, נקבל את ההודעה של ה CompareValidator.
הפיתרון הוא פשוט, להוסיף גם RequiredFieldValidator עבור תיבת הטקסט השנייה.
אבל כשאני רואה כאלו דברים, אני חייב להבין למה זה קורה, אז פתחתי את ה reflector, והנה הקוד:
protected override bool EvaluateIsValid()
{
string controlValidationValue =
base.GetControlValidationValue(base.ControlToValidate);
if (controlValidationValue.Trim().Length == 0)
{
return true;
}
לא העתקתי את המשך הקוד.
אבל ברור מדוע במידה ולא הכנסנו ערך, אנחנו לא מקבלים את השגיאה של CompareValidator.
לי זה נראה כמו באג של מי שפיתח, את ה CompareValidator .
דרך אגב, שמתם לב שהמפתחים של מייקרוסופט לא משתמשים ב string.Empty, אלא ב Length==0, כדי לבדוק האם קיים ערך ב string, (ככל הנראה ענייני ביצועים)