2011-03-28 14 views
7

के साथ कॉमा द्वारा अलग-अलग संख्याएं मैं एक एमवीसी 2 एपिकेशन पर काम कर रहा हूं।एएसपीनेट एमवीसी

मैं डेटा को सत्यापित करने के लिए डेटा एनोटेशन का उपयोग करता हूं (क्लाइंट साइड और सर्वर दोनों पक्ष)। मेरे मॉडल में कई फ़ील्ड हैं जो केवल दशमलव मानों की अनुमति देता है। जैसे ही कोई उपयोगकर्ता दशमलव मान टाइप करता है, मैं चाहता हूं कि इसे अल्पविराम से अधिक पठनीय प्रारूप में परिवर्तित किया जाए। उदाहरण के लिए 1200 को 1,200 तक स्वरूपित किया जाना चाहिए जबकि 500 ​​को इसके रूप में रहना चाहिए।

public virtual GrossFee? Fee { get; set; } 

यहाँ और यह कैसे दृश्य पर है:

यहाँ मेरी मॉडल है

%: Html.TextBoxFor(model => model.GrossFee)%> 

कोई इस बारे में विचारों अत्यधिक सराहना की जाएगी।

धन्यवाद!

+1

शुद्ध क्लाइंट साइड के लिए इस उत्तर को चेकआउट करें: http://stackoverflow.com/questions/1990512/add-comma-to-numbers-every-three-digits-using-jquery –

उत्तर

9

इसके बजाय toString के भीतर एक स्वरूप का उपयोग करने के Html.TextBoxFor आप Html.EditorFor उपयोग कर सकते हैं और दृश्य है इस तरह डेटा एनोटेशन का सम्मान करते हैं सक्षम होना चाहिए:

मॉडल:

(मुझे नहीं पता कि GrossFee? क्या है लेकिन इसे दशमलव मान लें)

[DisplayFormat(DataFormatString = "{0:0,0}")] 
public virtual Decimal? Fee { get; set; } 

दृश्य:

Html.EditorFor(model => model.GrossFee) 

आप भी अपने विशेष आवेदन के अनुरूप करने के लिए HtmlEncode और ApplyFormatInEditMode बदलाव करने पड़ सकता है।

कुछ भी जो टेक्स्टबॉक्स सामग्री को अल्पविराम समूह संख्याओं में दर्ज किया जाता है जैसे ही दर्ज किया जाता है (जैसे पोस्ट पोस्ट से पहले) जावास्क्रिप्ट आधारित होना चाहिए।

+0

आपके सुझाव के लिए बहुत बहुत धन्यवाद। मैंने आपके जैसा उल्लेख किया है और यह जिस तरह से मैं चाहता हूं सकल शुल्क का मूल्य प्रदर्शित करता है। [DisplayFormat (DataFormatString = "{0: 0,0}", ApplyFormatInEditMode = true, HtmlEncode = true)] सार्वजनिक दशमलव GrossFee {get; सेट; } लेकिन जब फॉर्म खुद को मॉडलस्टेट पर पीटा जाता है। इसालिद झूठा है और यह शिकायत करता है कि सकल शुल्क का मूल्य सही प्रारूप में नहीं है। बीटीडब्लू में मेरे पास क्लाइंट साइड सत्यापन सत्य है और मेरे पास एक फ़ील्ड मैसेज है जो प्रत्येक फ़ील्ड के लिए नियंत्रण है। अनेक अनेक धन्यवाद। – user629161

+0

यह शायद इसलिए है क्योंकि मानों में अब अल्पविराम है और आपका वैधकर्ता सीधे संख्या की अपेक्षा कर रहा है।यदि कॉमा चीज महत्वपूर्ण है तो आपको फॉर्म पोस्ट में भेजने से पहले कस्टम सत्यापनकर्ताओं पर विचार करना होगा या उन्हें अलग करना होगा। –

+2

अल्पविरामों के साथ बाध्यकारी दशमलव मॉडल मॉडल करने के लिए "आधिकारिक" समाधान यहां दिया गया है। http://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx – Ryan

0

आप की

var foo = 1200.2; 
var bob = foo.ToString("#,###.00##"); 
+0

मैं इसे क्लाइंट साइड पर गतिशील रूप से करना चाहता हूं जैसे कि मैं पाठ में 1200 दर्ज करता हूं बॉक्स और जैसे ही टेक्स्ट बॉक्स फोकस खो देता है, इसे स्ट्रिंग को "#, ###। ##" में प्रारूपित करना चाहिए। – user629161

3
[DisplayFormat(DataFormatString = "{0:n}")] 
public virtual GrossFee? Fee { get; set; } 

आशा है कि यह, आप

4
drPastDateDetail[strMS] = decValue.ToString(); 
उपरोक्त पंक्ति के बजाय

मदद कर सकते हैं अगर आप एक अल्पविराम से संख्यात्मक मान प्रदर्शित करना चाहते हैं, तो निम्न कोड में मदद मिलेगी हैं-

String Test = String.Format("{0:#,#.##}",decValue); 
drPastDateDetail[strMS]=Test;