באג בשימוש בValidator ?

orenphp

New member
באג בשימוש בValidator ?

אני משתמש בRequiredFieldValidator בשביל שדה מסוים בטופס שלי. כאשר אני קובע את EnableClientScript לtrue, אז אני יכול לראות, באמצעות view source, שהוא מוסיף שורה בonsubmit לform element שלי שאוכף את הבדיקה הרצוייה כבר בצד לקוח. מה שכן, אפשר לראות שם משהו כזה:
<form name="Login" method="post" action="Login.aspx" language="javascript" onsubmit="if (!ValidatorOnSubmit()) return false;" id="Login">​
מבדיקה קצרה שערכתי בexplorer שלי (IE6 על windows xp sp1), ראיתי שלא משנה מה קורה - אף פעם לא מתבצע Postback חזרה לצד שרת, גם אם הtextbox(נניח) שהvalidator אוכף אכן מלא, כנדרש. כשהעתקתי את הקוד הצידה ושיניתי את השורה ל:
<form name="Login" method="post" action="Login.aspx" language="javascript" onsubmit="return ValidatorOnSubmit();" id="Login">​
אז הקוד עבד כנדרש, כלומר רק במידה והtextbox היה ריק, הייתי מקבל את השגיאה ונשאר אצל הלקוח, אחרת - הייתי עולה לשרת. אפשרות נוספת להוסיף לקוד משהו כמו |קוד| if (!ValidatorOnSubmit()) return false; else return true; גם זה כמובן היה עובד. הבעיה היא שהקוד הרי מחולל בשבילי באמצעות הRender של הפקד של הvalidator ואין לי שליטה עליו (יכולה להיות לי, באמצעות ירושה, אבל זה פיתרון עקום, כי הvalidator-ים אמורים לעבוד כנדרש). מישהו יודע מה קורה כאן ? אולי הגדרות של הIE ? (ניסיתי גם לשחק שם ללא הצלחה)
 

orenphp

New member
אכן באג של MS - הפיתרון:

את הפיתרון לבעיה גיליתי ב: http://thomasfreudenberg.com/blog/archive/2004/04/05/CommentProblemSolved.aspx הפיתרון הוא החליף בקובץ:
C:\Inetpub\wwwroot\aspnet_client\system_web\1_1_4322\WebUIValidation.js​
את הפו' ValidatorCommonOnSubmit ב:
function ValidatorCommonOnSubmit() { event.returnValue = !Page_BlockSubmit; Page_BlockSubmit = false; return true; //this is the fix }​
 

PixelStyle

New member
לא באמת הבנתי את הבעיה אבל-

אם אתה עושה EnableClientScript=True אז אתה צריך לעשות גם את הבדיקה: If Page.IsValid Then ואז זה יעבוד מקווה שלזה התכוונת
 

orenphp

New member
לא לזה התכוונתי.

מה שאתה מציע זה בדיקה של הvalidator בצד-שרת, אני מדבר על בדיקה בצד לקוח. ישנו באג של מיקרוסופט, אנא קרא את ההודעה המקורית שלי לעומק + את הפיתרון שהבאתי (כולל הלינק שצירפתי).
 
למעלה