मैं एएसपीनेट सत्यापनकर्ताओं को विस्तारित करना चाहता हूं जैसे कि मैं एक वैधकर्ता को दूसरे पर निर्भर कर सकता हूं। मेरी स्थिति यह है कि हमें किसी टेक्स्टबॉक्स में दिनांक सत्यापित करना होगा। आम तौर पर मैं केवल एक आवश्यक फ़ील्ड वैलिडेटेटर (दिनांक प्रदान करने के लिए सुनिश्चित करने के लिए) का उपयोग करता हूं, तुलना वैलिडेटर (यह सुनिश्चित करने के लिए कि तिथि एक तिथि है) और आखिर में एक रेंज वैलिडेटेटर (यह सुनिश्चित करने के लिए कि तिथि आवश्यक सीमा के भीतर है)।विस्तारित एएसपी.NET मान्यकर्ता
इस समस्या में यह है कि वैधकर्ता एक दूसरे पर निर्भर नहीं हैं, जिसके परिणामस्वरूप उपयोगकर्ता प्रत्येक सत्यापनकर्ता के लिए एक बार में सभी तीन संदेशों को देखेगा, वास्तव में जब हम उन्हें देखना चाहते हैं तो सबसे प्रासंगिक संदेश है, यानी यदि वे दिनांक टेक्स्ट बॉक्स में "एबीसी" दर्ज करते हैं तो यह संदेश दिखाने के लिए उचित नहीं होगा कि तिथि वैध सीमा में नहीं है (भले ही तकनीकी रूप से मुझे लगता है कि यह सच है)।
वर्तमान में इस प्रकार की कार्यक्षमता प्रदान करने के लिए हम एक कस्टम वैलिडेटर का उपयोग करते हैं और सर्वर के भीतर सभी तीन मान्यताओं को ईवेंट हैंडलर मान्य करते हैं और सत्यापन सत्यापन विफल होने के आधार पर त्रुटि संदेश प्रोग्रामेटिक रूप से बदलते हैं।
मैं इसे थोड़ा और अधिक मानकीकृत करना चाहता हूं क्योंकि यह इस एप्लिकेशन में काफी कुछ होता है, मुझे लगता है कि अगर मैं एक दूसरे पर निर्भर करने वाले वैधकर्ता बना सकता हूं तो यह समस्या का समाधान करेगा और हमें क्लाइंट का उपयोग करने की अनुमति देगा विशेष रूप से कस्टम सत्यापन को संभालने के लिए एक पोस्टबैक करने के बजाय साइड सत्यापन।
विचार यह है कि यदि एक वैधकर्ता दूसरे पर निर्भर करता है तो वह "मास्टर" मान्य है तो निर्भर व्यक्ति सामान्य सत्यापन (मूल्यांकन मूल्यांकन()) कर देगा अन्यथा यदि मास्टर सत्यापनकर्ता मान्य नहीं है तो अन्य आश्रित वैधकर्ता होंगे वैध।
मैं पहले से ही ढांचे में प्रदान किए गए विभिन्न सत्यापनकर्ता नियंत्रणों से विरासत में निम्नलिखित समाधान के साथ आया हूं।
public class RequiredFieldDependentValidator : RequiredFieldValidator
{
[Description("The validation control to depend on for determining if validation should occur")]
public string ValidationControlToDependOn
{
get
{
object obj = ViewState["ValidationControlToDependOn"];
if (obj != null) return (string) obj;
return null;
}
set
{
Control control = FindControl(value);
if (control is IValidator)
ViewState["ValidationControlToDependOn"] = value;
else
throw new HttpException("ValidationControlToDependOn is not a validation control");
}
}
protected override bool EvaluateIsValid()
{
IValidator validationControlToDependOn = FindControl(ValidationControlToDependOn) as IValidator;
if(validationControlToDependOn != null)
{
return !validationControlToDependOn.IsValid || base.EvaluateIsValid();
}
return base.EvaluateIsValid();
}
वर्तमान में मैं सिर्फ RequiredFieldValidator के लिए यह कोड किया है, आदर्श मैं सत्यापनकर्ता के सभी के लिए इस कार्यक्षमता प्रदान करना चाहते हैं, लेकिन मैं प्रत्येक के लिए एक समान वर्ग में उपरोक्त कोड को कॉपी किए बिना यह करने के लिए एक तरह से नहीं देख सकते हैं व्यक्तिगत प्रकार का सत्यापनकर्ता मैं इस कार्यक्षमता को इस प्रकार प्रदान करना चाहता हूं कि अगर कोई समस्या है तो मुझे वापस जाना होगा और प्रत्येक कोडर प्रकार पर व्यक्तिगत रूप से इस कोड को बदलना होगा।
क्या कोई तरीका है कि मैं इस कोड को "केंद्रीकृत" कर सकता हूं और इसे वैधकर्ताओं में आसानी से उपयोग करने के बिना पूरे सत्यापनकर्ताओं को स्क्रैच से लिखने के लिए उपयोग किया जाता है, इसलिए मैं उस वर्ग को बदल सकता हूं जो वे लाइन के नीचे से प्राप्त करते हैं।
चीयर्स,
क्या यह पिछले पृष्ठ पर निर्भर पृष्ठ पर प्रत्येक सत्यापनकर्ता नहीं करेगा? और मुझे लगता है कि मुझे अभी भी प्रत्येक सत्यापनकर्ता –