2009-06-02 9 views
64

मैं टेक्स्टबॉक्स पर किसी दिनांक को सत्यापित करने के लिए ASP.NET RangeValidator का उपयोग करने का प्रयास कर रहा हूं। टेक्स्टबॉक्स पर दर्ज तिथि का प्रारूप dd MMMM yyyy है।एएसपी.NET सत्यापनकर्ता के साथ दिनांक सत्यापन

वैध दिनांक सत्यापित करने के लिए मैं श्रेणी सत्यापनकर्ता का उपयोग कैसे कर सकता हूं? अगर मैं 1 जनवरी 1000 को न्यूनतम या अधिकतम मान के रूप में दर्ज करता हूं तो मुझे एक त्रुटि मिलती है कि मूल्य को टाइप तिथि में परिवर्तित नहीं किया जा सकता है, लेकिन यदि मैं किसी अन्य प्रारूप का उपयोग करता हूं तो यह मेरे दर्ज टेक्स्ट को अमान्य के रूप में उठाता है।

<asp:TextBox 
    runat="server" 
    ID="txtDatecompleted" 
/> 
<cc2:CalendarExtender 
    ID="datecompletedExtender" 
    runat="server" 
    TargetControlID="txtDatecompleted" 
    Format="dd MMMM yyyy" 
/> 
<asp:RangeValidator 
    runat="server" 
    ID="RangeValidator1" 
    Type="Date" 
    ControlToValidate="txtDatecompleted" 
    MaximumValue="9999/12/28" 
    MinimumValue="1000/12/28" 
    ErrorMessage="enter valid date" 
    Display="None" 
/> 
<cc2:ValidatorCalloutExtender 
    ID="RangeValidator1_ValidatorCalloutExtender" 
    runat="server" 
    Enabled="True" 
    TargetControlID="RangeValidator1"> 
</cc2:ValidatorCalloutExtender> 
+0

क्या आप प्रारूप को सत्यापित करने की कोशिश कर रहे हैं? क्योंकि मैं आपकी समस्या को समझ नहीं रहा हूं? – TStamper

उत्तर

126

बेस्ट विकल्प होगा

एक वेब फार्म के लिए सत्यापनकर्ता तुलना करें:

नीचे मेरी कोड है। अपने नियंत्रण को वैध बनाओ। अपनी टाइप प्रॉपर्टी को डेट पर सेट करें। DataTypeCheck जैसे करने के लिए अपने ऑपरेटर संपत्ति सेट करें:

<asp:CompareValidator 
    id="dateValidator" runat="server" 
    Type="Date" 
    Operator="DataTypeCheck" 
    ControlToValidate="txtDatecompleted" 
    ErrorMessage="Please enter a valid date."> 
</asp:CompareValidator> 
+3

सरल और सुरुचिपूर्ण। इसके अलावा निर्मित नियंत्रण भी वैध/अमान्य लीप वर्ष तिथियों की जांच करते हैं। 2/29/2011 अमान्य कहता है लेकिन 2/29/2012 वापस वैध आता है। फैंसी नियमित अभिव्यक्तियों के साथ परेशानी की कोई ज़रूरत नहीं है! –

+6

@Shoban - क्या मेरा दिनांक प्रारूप 'डीडी/एमएम/वाई वाई वाई' है? –

+1

@ रयान सम्मूत मैं भी इस सवाल का जवाब जानना चाहता हूं। दिनांक प्रकार तुलना वैलिडेटर एमएम/डीडी/वाई वाई स्वीकार करता है। मैं 2 अंकों के वर्ष मूल्य को बाहर करना चाहता हूं। – danyim

2

मुझे विश्वास है कि दिनांक आवेदन की वर्तमान संस्कृति में निर्दिष्ट किया जाना है। आप CultureInvariantValues को सत्य में सेट करने के साथ प्रयोग करना चाहेंगे और देखें कि क्या आपकी समस्या हल हो जाती है। अन्यथा आप जो चाहते हैं उसे प्राप्त करने के लिए आपको मौजूदा संस्कृति (या culture स्वयं) के लिए DateTimeFormat को बदलने की आवश्यकता हो सकती है।

24

एक CustomValidator भी यहाँ काम करेगा:

<asp:CustomValidator runat="server" 
    ID="valDateRange" 
    ControlToValidate="txtDatecompleted" 
    onservervalidate="valDateRange_ServerValidate" 
    ErrorMessage="enter valid date" /> 

कोड-पीछे:

protected void valDateRange_ServerValidate(object source, ServerValidateEventArgs args) 
{ 
    DateTime minDate = DateTime.Parse("1000/12/28"); 
    DateTime maxDate = DateTime.Parse("9999/12/28"); 
    DateTime dt; 

    args.IsValid = (DateTime.TryParse(args.Value, out dt) 
        && dt <= maxDate 
        && dt >= minDate); 
} 
+0

मैंने आपकी विधि की कोशिश की लेकिन यह एक अपडेट पैनल में विफल रहा। Pls chk: http://stackoverflow.com/questions/2071585/asp-net-custom-validation-not-working-even-when-required-field-validator-is-use/14361135#14361135 –

+1

यह सबसे अच्छा तरीका था मेरे लिए, सबसे आसान और मेरे पास कोड के पीछे चेक किए गए और किए गए कार्यों पर पूर्ण नियंत्रण है। Thnx बहुत क्रिस !! – user1501127

+1

यह विरासत प्रणाली के लिए एसक्यूएल तिथि सीमा संपादन के लिए अच्छा काम करता है जो डेटाटाइम फ़ील्ड का भी उपयोग करता है। धन्यवाद। –

7

मुझे लगता है कि निम्नलिखित यह करने के लिए सबसे आसान तरीका है।

<asp:TextBox ID="DateControl" runat="server" Visible="False"></asp:TextBox> 
<asp:RangeValidator ID ="rvDate" runat ="server" ControlToValidate="DateControl" ErrorMessage="Invalid Date" Type="Date" MinimumValue="01/01/1900" MaximumValue="01/01/2100" Display="Dynamic"></asp:RangeValidator> 
संबंधित मुद्दे