DCSIMG
CompareValidator Required RequiredFieldValidator - שלמה גולדברג (הרב דוטנט)

שלמה גולדברג (הרב דוטנט)

מרצה בסלע ויועץ בעולם ה - net.

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, (ככל הנראה ענייני ביצועים)

תוכן התגובה

Rotem Bloom כתב/ה:

אתה בהחלט צודק בדיקת אורך המחרוזת הרבה יותר מהירה מבדיקת string.Empty ככה הם גם עושים בפונקציה IsNullOrEmpty.

# May 18, 2009 8:46 AM

שלמה גולדברג כתב/ה:

יצא לי לא מזמן, לייצר CustomValidator, יחד עם ValidatorCallout של ajax, יש עם זה כמה בעיות, ופתרתי אותם

# May 20, 2009 12:56 AM

עמירם כתב/ה:

מז"א , פתחת את ה Reflactor , אתה מתכוון למצב Debug , שעבור כל פקודה לוחצים F11 על מנת שהיא תרוץ ? (עם הסימון האדום הזה בצד)

# July 16, 2009 4:48 PM

Shlomo כתב/ה:

לא, יש כלי שכל מפתח חייב להכיר, הוא נקרא Reflactor והוא נותן לך לראות את כל הקוד של dll מקומפל.

ניתן להריד אותו מכאן:

www.red-gate.com/.../reflector

# July 16, 2009 5:10 PM

עמירם כתב/ה:

היי

הורדתי את ה REFLECTOR , אני מתחיל ככה לרפרף בו ,

אני שם לב שכמו בדוגמא שהבאת יש המון פעמים את האובייקט base

מה אומר האובייקט הזה ?

נגיד רציתי לדעת מה קורה מאחורי המתודה של gridview שמבצעים DATABIND

אז קיבלתי את הקוד הנ"ל

public sealed override void DataBind()

{

   base.DataBind();

}

וזה לא אומר לי כלום ..

# July 17, 2009 12:13 PM

Shlomo כתב/ה:

base הכוונה שזה מפעיל את המתודה של האבא שלו, אתה יכול פשוט ללחוץ ב - reflector על ה - DataBind של ה - base.DataBind ותגיע למתודה של האבא

# July 17, 2009 12:53 PM
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 1 and 8 and type the answer here:


Enter the numbers above: