2011-02-02 20 views
5

एएसपीनेट एमवीसी ऐप में, मुझे इस समस्या को विरासत में मिला है (यदि यह कोई समस्या है?) जहां एक डेवलपर ने दिनांक प्रकार के लिए String का उपयोग किया है।'दिनांक` प्रकार के बजाय' स्ट्रिंग` का उपयोग करते समय दिनांक को कैसे सत्यापित करें?

अपने मॉडल में संपत्ति पढ़ता है:

[Required] 
[DisplayName("Registration Date")] 
public string Registrationdate { get; set; } 

व्यापार आवश्यकता है कि क्षेत्र नहीं आवश्यक है, लेकिन अगर उस क्षेत्र में कुछ है तो यह एक वैध तिथि होनी चाहिए।

डेटा आवश्यकता को बदले बिना आप इस आवश्यकता को कैसे लागू करेंगे, ?

+1

शायद एक जांच क्रियान्वित करने – Rob

उत्तर

8

It looks like you'reSystem.ComponentModel.DataAnnotations का उपयोग कर। इस लाइब्रेरी का उपयोग करके ऐसा करने का सबसे अच्छा तरीका दिनांक तारों को सत्यापित करने और संपत्ति पर लागू करने के लिए एक नई विशेषता बनाना होगा।

[AttributeUsage(AttributeTargets.Property, Inherited = true)] 
class DateAttribute : ValidationAttribute 
{ 
    public override bool IsValid(object value) 
    { 
     var dateString = value as string; 
     if (string.IsNullOrWhiteSpace(dateString)) 
     { 
      return true; // Not our problem 
     } 
     DateTime result; 
     var success = DateTime.TryParse(dateString, out result); 
     return success; 
    } 

आप शायद इस कोड तार आप किस तरह के ग्राहक से उम्मीद कर रहे हैं पर निर्भर करता है पर विस्तार करना चाहते हैं: यहाँ कुछ कोड आप शुरू करने के लिए के साथ है। साथ ही, यह आपको कोई क्लाइंट-साइड सत्यापन नहीं देगा।

+0

+1, मेरा दिन – Rob

+0

+1 बनाया गया है: आप बिल्कुल सही हैं कि मैं डेटाअनोटेशन का उपयोग कर रहा हूं और इस प्रकार के समाधान के समान कुछ उम्मीद कर रहा था। मैं इस शाम को आजमाने की कोशिश कर रहा हूं। – VoodooChild

+0

एक आकर्षण की तरह काम किया - धन्यवाद! – VoodooChild

7
public string Registrationdate { 
    get; 
    set { 
     DateTime date; 
     var isDate = DateTime.TryParse(value, out date); 
     if (isDate) { 
      _registrationDate = value; 
     } 
     else { 
      // Throw exception 
     } 
    } 
} 
+0

ठीक धन्यवाद सेटर विधि में DateTime.TryParse का उपयोग कर की तर्ज पर कुछ करना चाहेंगे, यह एक बुरा दृष्टिकोण है। लेकिन मैं इसे एक एमवीसी ऐप में सत्यापन त्रुटियों के रूप में कैसे दिखा सकता हूं? "0 ऐसा लगता है कि आप हैं" लिंक के लिए +1 – VoodooChild

1

(एक तरह से) स्यूडोकोड:

if (Registrationdate is not empty) 
{ 
    RegistrationDateTime = new DateTime(Registrationdate); 

    if (RegistrationDateTime is not valid DateTime) 
     fail validation; 
} 
0

नियमित अभिव्यक्ति के बारे में कैसे? डेटा एनोटेशन में रेगेक्स विशेषता है। अब आपको एक प्रारूप पर ठीक करना होगा, आईएसओ (yyyy/mm/dd) कहें जो आपकी आवश्यकताओं को पूरा नहीं कर सकता है।

एक और विकल्प आपकी खुद की एनोटेशन बनाने के लिए हो सकता है।

फिर भी एक और समाधान एक नामुमकिन डेटाटाइम (डेटटाइम?) का उपयोग कर सकता है। मुझे यकीन नहीं है कि यह कैसे संभाला जाएगा, इसलिए कुछ परीक्षण और त्रुटि की आवश्यकता होगी। हालांकि यह केवल एक के अतिरिक्त की आवश्यकता है? तो कोशिश करने के लिए अपेक्षाकृत आसान हो सकता है।

साइमन

संबंधित मुद्दे