8

में मैं MVC के लिए प्रदर्शन और EditorTemplates के बारे में इस पोस्ट पाया प्रदर्शन टेम्पलेट का उपयोग कर मुद्रा:प्रारूपण MVC

http://www.growingwiththeweb.com/2012/12/aspnet-mvc-display-and-editor-templates.html

यह एक प्रदर्शन टेम्पलेट बनाता है आसानी से एक दशमलव मुद्रा पर हस्ताक्षर के साथ स्वरूपित प्रदर्शित करने के लिए।

मॉडल उदाहरण में प्रयुक्त:

public class TestModel 
{ 
    public decimal Money { get; set; } 
} 

प्रदर्शन टेम्पलेट:

दृश्य/साझा/DisplayTemplates/decimal.cshtml:

@model decimal 

@{ 
    IFormatProvider formatProvider = 
     new System.Globalization.CultureInfo("en-US"); 
    <span class="currency">@Model.ToString("C", formatProvider)</span> 
} 

मेरी वेबसाइट में मैं एक सहायक है कक्षा से स्वरूपित मुद्रा स्ट्रिंग को पुनर्प्राप्त करने के लिए एक विधि के साथ कक्षा, इसलिए मैं उपरोक्त को कुछ इस प्रकार से बदल दूंगा:

@model decimal 
@(MyHelperClass.GetCurrencyString(Model)) 

और अंत में दृश्य जहां हम स्वरूपित मुद्रा देखना चाहते हैं:

@model TestModel  
@Html.DisplayFor(e => e.Money) 

आउटपुट:

<span class="currency">$3.50</span> 

मैं इस बिना किसी समस्या के लागू कर सकते हैं। लेकिन निश्चित रूप से मेरे पास अलग-अलग विचार हैं जहां मैं एक स्वरूपित मुद्रा देखना चाहता हूं। लेकिन कुछ मामलों में मैं मुद्रा चिह्न दिखाना नहीं चाहता हूं।

मेरा प्रश्न यह है कि कोड में बहुत अधिक मात्रा के बिना मुझे इस छोटे बदलाव को कैसे कार्यान्वित करना चाहिए।

मैं यह करने के लिए अपने प्रदर्शन टेम्पलेट बदल दिया है:

@model decimal 

@{ 
    bool woCurrency = (bool)ViewData["woCurrency"]; 
} 

@(MyHelperClass.GetCurrencyString(Model)Model,woCurrency)) 
बेशक

मैं भी इस अतिरिक्त विशेषता स्वीकार करने के लिए GetCurrencyString विधि के लिए बदल दिया है

यहाँ मेरे वर्तमान कार्यान्वयन है। तो वास्तव में मैं सब कुछ काम करता है जैसे कि यह काम करना चाहिए

@Html.DisplayFor(m => m.Money, new { woCurrency = true }) 

:

मेरी नजर में मैं अब भी इस विशेषता प्रदान करने के लिए है। लेकिन किसी भी तरह से मुझे यह सोल्ल्यूशन पसंद नहीं है जो दृश्य को अधिक जटिल बनाता है।

मेरा प्रश्न: क्या ऐसा कुछ करने के लिए कोई और तरीका है? या संभवतः मेरे वर्तमान सोल्शन को अनुकूलित करने के लिए कोई सलाह?

धन्यवाद!

उत्तर

2

कैसे HtmlHelper के बारे में है कि ViewData["woCurrency"] स्वचालित रूप से जाँच करता है और सही परिणाम आउटपुट?

public static string Currency(this HtmlHelper helper, decimal data, string locale = "en-US", bool woCurrency = false) 
    { 
     var culture = new System.Globalization.CultureInfo(locale); 

     if (woCurrency || (helper.ViewData["woCurrency"] != null && (bool)helper.ViewData["woCurrency"])) 
      return data.ToString(culture); 

     return data.ToString("C", culture); 
    } 
फिर

:

@Html.Currency(Model.Money); 
+0

सुझाव के लिए धन्यवाद। क्या इसका मतलब है कि मुझे दृश्य में व्यूडाटा में संपत्ति को हमेशा सेट करने की आवश्यकता है? के बाद से मुझे लगता है मैं एक दृश्य में दिखाना चाहते हैं एकाधिक कीमतों लेकिन ऐसा नहीं किया है उन सभी को एक मुद्रा पर हस्ताक्षर दिखाना चाहिए। जब मैं प्रदर्शन टेम्पलेट्स के बारे में पढ़ना शुरू किया मैं वे सब कुछ बहुत आसान है और क्लीनर होगा सोचा है, लेकिन यह देखने के लिए की तरह वे मेरे :( – ThdK

+0

मूर्ख बनाया आप 'controller' में' ViewData' सेट के साथ-साथ कर सकते हैं। – haim770

+0

हाँ मुझे पता है, लेकिन फिर यह हर मुद्रा मैं वर्तमान दृश्य पर स्वरूपित करना चाहते हैं के लिए एक ही मूल्य होता है। मैं सबसे लाइनों के लिए मैं एक मुद्रा पर हस्ताक्षर नहीं करना चाहती एक viewmodel। प्रॉपर्टीज़ में से एक एक दशमलव मूल्य है। टोकरी में एक लाइन का प्रतिनिधित्व किया है, के लिए उप-योग और कुल लाइनों, मैं मुद्रा पर हस्ताक्षर दिखाया जाना चाहेंगे। हालांकि दोनों लाइनों एक ही वस्तु (viewmodel) का उपयोग उनके मूल्यों स्टोर करने के लिए। – ThdK

17

आपको अपनी मनी प्रॉपर्टी में DisplayFormat विशेषता लागू करने की आवश्यकता है।उदाहरण के लिए:

[DisplayFormat(DataFormatString = "{0:C}")] 
public decimal Money { get; set; } 

अधिक जानकारी के लिए इन दो लिंक पर एक नजर है:

  1. DisplayFormatAttribute.DataFormatString (पृष्ठ के तल पर उदाहरण स्वरूपण मुद्रा का उपयोग करता एक उदाहरण के रूप)
  2. ASP.NET MVC - DisplayFormat attribute
+0

दुर्भाग्य से, हम मुद्रा स्ट्रिंग स्वरूपित करने के लिए कुछ भी कस्टम नियम ... यह भी हर जगह यह प्रयोग किया जाता है पर अपनी मुद्रा का प्रतिपादन प्रभाव होता है, जबकि मैं सिर्फ करना चाहते हैं दो अलग-अलग कार्यान्वयन करें। – ThdK

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