2013-07-10 3 views
16

मेरे पास एक एमवीसी पृष्ठ है जिसमें कुछ टाइमपिकर्स हैं। ये मॉडल में ऑब्जेक्ट्स की सूची में संग्रहीत TimeSpan के रूप में संग्रहीत हैं। समस्या यह है कि मुझे इनपुट फ़ील्ड में सेकेंड के साथ मुद्रित टाइम्सपैन मिलते हैं। क्या इन मॉडल गुणों को प्रारूपित करने का कोई तरीका है ताकि मुझे 07:00:00 के बजाय, किसी अन्य तरीके से मुद्रित टाइम्सपैन मिले (जैसे 7:00)? कहने की जरूरत नहीं है, [DisplayFormat...] का मेरा "सुझाव" काम नहीं करता है। कम से कम जिस तरह से मैंने आशा की थी।स्वरूपण एमवीसी मॉडल टाइमस्पेन क्षेत्र

इनपुट फ़ील्ड इस तरह परिभाषित कर रहे हैं:

public class Workshift 
{ 
    [DisplayFormat(Something here perhaps?)] 
    public TimeSpan? Start { get; set; } 
    public TimeSpan? End { get; set; } 
    public TimeSpan? Pause { get; set; } 
} 

public class TimeRegistrationViewModel 
{ 
    public List<Workshift> Shifts { get; set; } 

    ... 
} 

के रूप में हमेशा यह सराहना:

@Html.TextBoxFor(x => x.Shifts[i].Start) 

मॉडल की प्रासंगिकता का की तरह लग रहा है!

+0

के बाद से कोई भी यह कैसे पूरा करने के लिए पता करने के लिए लगता है, मैं साथ चला गया टाइमस्पैन के बजाय स्ट्रिंग का उपयोग करना। यह अभी भी अच्छा होगा कि यह ठीक से कैसे करें। – SamiHuutoniemi

उत्तर

25
[DisplayFormat(DataFormatString="{0:hh\\:mm}", ApplyFormatInEditMode = true)] 
public TimeSpan? Start { get; set; } 

[DisplayFormat(DataFormatString="{0:hh\\:mm}", ApplyFormatInEditMode = true)] 
public TimeSpan? End { get; set; } 

[DisplayFormat(DataFormatString="{0:hh\\:mm}", ApplyFormatInEditMode = true)] 
public TimeSpan? Pause { get; set; } 

लेकिन ध्यान रखें है कि TimeSpan के लिए प्राथमिक उद्देश्य के लिए समय की एक मापा जाता अवधि, नहीं दिन के समय का प्रतिनिधित्व करने के लिए है। इसका मतलब है कि TimeSpan मान 24 घंटे से अधिक हो सकते हैं। वे समय रेखा पर आगे बढ़ने का प्रतिनिधित्व करने के लिए नकारात्मक भी हो सकते हैं।

यह स्वीकार्य उन्हें समय-समय पर उपयोग करने के लिए उपयोग करता है, और वास्तव में स्वयं ढांचे द्वारा किया जाता है (उदाहरण के लिए, DateTime.TimeOfDay)। लेकिन जब इस तरह इस्तेमाल किया जाता है, तो आपको उपयोगकर्ता इनपुट सावधानी से सत्यापित करना चाहिए। यदि आप केवल डेटा प्रकार पर भरोसा करते हैं, तो उपयोगकर्ता मान्य समय अवधि के मान दर्ज कर सकता है, लेकिन वैध दिन के समय नहीं। उदाहरण के लिए, -1.22:33:44 एक मान्य TimeSpan है जो पिछले में 1 दिन, 22 घंटे, 33 मिनट और 44 सेकंड का प्रतिनिधित्व करता है।

यह बहुत आसान होगा यदि नेट के मूल Time प्रकार, है लेकिन यह नहीं है। अद्यतन: अब System.Time पैकेज में CoreFXLab में उपलब्ध एक मूल देशी है।

इसके अलावा, TextBoxFor विधि डेटा एनोटेशन नहीं उठाएगी। आप या तो सीधे एक पैरामीटर के रूप प्रारूप स्ट्रिंग निर्दिष्ट कर सकते हैं, इस तरह:

@Html.TextBoxFor(x => x.Shifts[i].Start, "{0:hh\\:mm}") 

या आप इस तरह EditorFor करने के लिए स्विच कर सकते हैं:

@Html.EditorFor(x => x.Shifts[i].Start) 
+0

यह उत्तर मेरे लिए बेहद उपयोगी था। आपको बहुत - बहुत धन्यवाद! –

+0

इस बारे में उल्लेख करते समय यह बहुत उपयोगी है: "इसके अलावा, टेक्स्टबॉक्स फोर विधि डेटा एनोटेशन नहीं उठाएगी।" क्या आपके पास इस लाइन के बारे में कोई संदर्भ है? – nguyenhoai890

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