में किसी विशिष्ट प्रारूप में दिनांक मान्य करें मेरे पास मेरे व्यूमोडेल में DateTime MyDate
प्रकार की एक संपत्ति है। मुझे यकीन है कि उपयोगकर्ता केवल एक विशिष्ट प्रारूप (dd.mm.yyyy) में एक पाठ बॉक्स में दिनांक भाग में प्रवेश करती है बनाना चाहते और निम्न विशेषताओं की कोशिश की:एएसपी.नेट एमवीसी 3
[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode=true)]
[RegularExpression(@"^(([0-2]\d|[3][0-1])\.([0]\d|[1][0-2])\.[2][0]\d{2})$",
ErrorMessage="Failed...")]
public DateTime MyDate { get; set; }
एक के लिए नियंत्रक कार्रवाई हस्ताक्षर HttpPost तरह लग रहा है इस:
@Html.TextBoxFor(model => model.MyDate)
:
@Html.EditorFor(model => model.MyDate)
[HttpPost]
public ActionResult Edit(int id, MyViewModel viewModel)
{
// MyViewModel contains the MyDate property ...
// ...
if (ModelState.IsValid)
{
// ...
}
// ...
}
उस्तरा ध्यान में रखते हुए मैं निम्नलिखित दो तरीकों की कोशिश की
के रूप में मैं चाहता हूँ यह काम नहीं करता। परिणाम है:
- क्लाइंट साइड सत्यापन दोनों एचटीएमएल सहायकों
- सर्वर साइड सत्यापन हमेशा दोनों सहायकों के लिए विफल रहता है के साथ की उम्मीद के रूप में काम करता है, यहाँ तक कि "2011/06/17" जो नियमित अभिव्यक्ति पारित की तरह वैध तिथियों के साथ।
MyDate
संपत्तिviewModel
में दर्ज की गई तिथि के साथ सही ढंग से भर दी गई है जो क्रिया को पारित किया जाता है। तो ऐसा लगता है कि मॉडल बाध्यकारी काम कर रहा था। DisplayFormat
विशेषता केवलEditorFor
द्वारा सम्मानित है लेकिनTextBoxFor
द्वारा नहीं।TextBoxFor
प्रदर्शित करता है "dd.mm.yyyy hh: mm: ss"
सवाल:
मैं एक संपत्ति है जो एक
string
नहीं है पर सब पर एकRegularExpressionAttribute
लागू कर सकते हैं? यदि यह अनुमति है कि गैर-स्ट्रिंग प्रॉपर्टी के लिए रीग एक्स का मूल्यांकन कैसे किया जाता है जैसे सर्वर परDateTime
? क्या रेग एक्स की तुलना मेंMyDate.ToString()
की तरह कुछ है? (यह समझा जाएगा कि सत्यापन विफल हो जाता है क्योंकि ToString समय भाग जो नियमित अभिव्यक्ति पास नहीं सहित एक स्ट्रिंग वापस आ जाएगी।)DisplayFormat
विशेषता आम तौर पर केवलTextBoxFor
द्वाराEditorFor
और कभी नहीं द्वारा सम्मानित है?मैं दिनांक सत्यापन सही कैसे कर सकता हूं?
लिंक के लिए धन्यवाद, मैंने इसे भविष्य के संदर्भ के लिए बुकमार्क किया है। लेकिन: मुझे नहीं लगता कि मेरी समस्या स्थानीयकरण के साथ कुछ भी करने के लिए है। मुझे विश्वास नहीं है कि नियमित अभिव्यक्ति को नजरअंदाज कर दिया जाता है: क्लाइंट साइड सत्यापन कार्य और सर्वर साइड सत्यापन भी reg ex के साथ कुछ करता है (यह इस नियम पूर्व के खिलाफ विफल रहता है, जैसा कि मॉडलस्टेट कहता है)। मैं एक देव मशीन (क्लाइंट और सर्वर = एक ही मशीन) पर परीक्षण करता हूं, इसलिए स्थानीय समान होते हैं। लेकिन मैं इस बीच भी विश्वास करता हूं कि एक पूर्व पूर्व का उपयोग गलत है (हालांकि अनदेखा नहीं किया गया है)। आप कैसे मान्य करेंगे कि उपयोगकर्ता केवल समय के बिना तारीख में प्रवेश करता है? – Slauma
@ स्लुमा, तथ्य यह है कि आपने उसी मशीन पर यह कोशिश की है इसका मतलब यह नहीं है कि ब्राउज़र और सर्वर की संस्कृति सेटिंग्स में अंतर नहीं है। जहां तक समय का हिस्सा चिंतित है, मैं बस उस उपयोगकर्ता को प्रारूप में बताऊंगा जिसकी उसे तारीख में प्रवेश करने की आवश्यकता है, और सर्वर पर मैं केवल समय के हिस्से को अनदेखा कर दूंगा यदि मेरे आवेदन की आवश्यकता नहीं है। शायद उपयोगकर्ता को सही प्रारूप में दर्ज करने वाले उपयोगकर्ता को सरल बनाने के लिए एक jquery date picker भी प्रदान करें। –
आप सही हैं, मैं इसे बहुत जटिल कोशिश कर रहा हूं। अब उपयोगकर्ता इनपुट के लिए थोड़ी अतिरिक्त सहायता के रूप में मैंने 'डेटऑनली' विशेषता बनाई है (यहां मेरा अपना जवाब देखें)। तिथि पिकर उपयोगकर्ता के लिए एक बेहतर मदद है! मैं इसे अगले चरणों में से एक के रूप में कोशिश करूंगा। – Slauma