@ Html.DisplayFor - DateFormat ("mm / dd / yyyy")


88

मेरे पास निम्नलिखित रेजर कोड है जो मुझे mm/dd/yyyyदिनांक प्रारूप के लिए चाहिए:

Audit Date: @Html.DisplayFor(Model => Model.AuditDate)

मैंने विभिन्न दृष्टिकोणों की संख्या की कोशिश की है लेकिन उनमें से कोई भी दृष्टिकोण मेरी स्थिति में काम नहीं करता है

मेरा ऑडिटडेट एक DateTime?प्रकार है

मैंने कुछ इस तरह की कोशिश की है और यह त्रुटि मिली है:

@Html.DisplayFor(Model => Model.AuditDate.Value.ToShortDateString())

अतिरिक्त जानकारी: टेम्पलेट का उपयोग केवल फ़ील्ड एक्सेस, प्रॉपर्टी एक्सेस, सिंगल-डायमेंशन एरे इंडेक्स या सिंगल-पैरामीटर कस्टम इंडेक्सर एक्सप्रेशंस के साथ किया जा सकता है।

इस की कोशिश की:

@Html.DisplayFor(Model => Model.AuditDate.ToString("mm/dd/yyyy"))

विधि 'ToString' के लिए कोई अधिभार 1 तर्क नहीं लेता है

जवाबों:


161

यदि आप उपयोग करते हैं DisplayFor, तो आपको या तो DisplayFormatविशेषता के माध्यम से प्रारूप को परिभाषित करना होगा या कस्टम डिस्प्ले टेम्पलेट का उपयोग करना होगा। (पूर्व निर्धारित DisplayFormatStringकी पूरी सूची यहां पाई जा सकती है ।)

[DisplayFormat(DataFormatString = "{0:d}")]
public DateTime? AuditDate { get; set; }

या दृश्य बनाएँ Views\Shared\DisplayTemplates\DateTime.cshtml:

@model DateTime?
@if (Model.HasValue)
{
    @Model.Value.ToString("MM/dd/yyyy")
}

यह सब पर लागू होगा DateTime, हालांकि, यहां तक ​​कि जहां आप समय के रूप में अच्छी तरह से कूटबन्धन कर रहे हैं। यदि आप चाहते हैं कि यह केवल डेट-ओनली प्रॉपर्टी पर ही लागू हो, तो अपनी प्रॉपर्टी पर इसका उपयोग करें Views\Shared\DisplayTemplates\Date.cshtmlऔर DataTypeविशेषता देखें:

[DataType(DataType.Date)]
public DateTime? AuditDate { get; set; }

अंतिम विकल्प का उपयोग नहीं करना है DisplayForऔर इसके बजाय सीधे संपत्ति को प्रस्तुत करना है:

@if (Model.AuditDate.HasValue)
{
    @Model.AuditDate.Value.ToString("MM/dd/yyyy")
}

मैंने आपके द्वारा सुझाए अनुसार एक डिस्प्लेटेम्पलेट बनाया है और जब मैं आपके द्वारा तैयार किए गए कोड को कॉपी और पेस्ट करता हूं तो मुझे यह त्रुटि मिल रही हैNo overload for method 'ToString' takes 1 arguments
Nick Kahn

3
मुझे लगता है कि होना चाहिए[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]

[DisplayFormat (DataFormatString = "{0: dd / MM / yyyy}")] तुर्की के लिए काम किया धन्यवाद
zapoo

@ मैक: तुम्हारा मतलब कैसे है? वे बहुत ज्यादा कर काम करते हैं, लेकिन अपने विशिष्ट परिदृश्य में शायद अभी नहीं। अधिक जानकारी के बिना, मैं नहीं कह सकता कि आपकी स्थिति क्या है।
क्रिस प्रैट

यदि आप चाहते हैं कि संपादक प्रारूप का उपयोग करें, ApplyFormatInEditMode = trueतो संपत्ति में जोड़ें [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]:। यह स्पष्ट होना चाहिए, लेकिन जब आप सभी समय-समय पर बेकार-कॉपी-पेस्ट करते हैं, तो यह संकेत देता है कि यह आपकी नाक से अतीत हो सकता है क्योंकि यह मेरा था :)
Heki

19

यदि आप बस उस मॉडल प्रॉपर्टी के मूल्य को आउटपुट कर रहे हैं, तो आपको DisplayForhtml हेल्पर की आवश्यकता नहीं है , बस इसे सीधे उचित स्ट्रिंग फॉर्मेटिंग के साथ कॉल करें

Audit Date: @Model.AuditDate.Value.ToString("d")

आउटपुट चाहिए

Audit Date: 1/21/2015

अंत में, आपकी ऑडिट की तारीख शून्य हो सकती है, इसलिए आपको अशक्त मूल्य को प्रारूपित करने का प्रयास करने से पहले सशर्त जांच करनी चाहिए।

@if (item.AuditDate!= null) { @Model.AuditDate.Value.ToString("d")}

आपके द्वारा प्राप्त की जा रही त्रुटि को देखते हुए, यह उत्तर प्रदान करता है , जो यह दर्शाता है कि त्रुटि आपके Html सहायकों में मॉडल शब्द का उपयोग करने से है। उदाहरण के लिए, का उपयोग कर @Html.DisplayFor(Model=>Model.someProperty)Modelउदाहरण के लिए, इसके अलावा किसी और चीज़ का उपयोग करने के लिए इन्हें बदलें : @Html.DisplayFor(x=>x.someProperty)या इन सहायकों में पूंजी Mको लोअरकेस mमें बदलें ।


अगर मैंने इस्तेमाल किया @Model.AuditDate.Value.ToString("d") Additional information: Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.
निक कहन

@ अब्बू हमज़ाह - लगता है कि आप अभी भी इसे Html.DisplayForहेल्पर में डालने की कोशिश कर रहे हैं । ऐसा मत करो। इसके अलावा, क्या आप सुनिश्चित हैं कि इसकी त्रुटि उस लाइन पर है और कुछ अन्य संपत्ति पर आप DisplayForसहायक का उपयोग करने की कोशिश नहीं कर रहे हैं ?
टॉमी

अगर मैं उपयोग कर @Model...रहा हूँ तो मुझे यह त्रुटि मिल रही है: 'मॉडल' की घोषणा के साथ विरोध होता है System.Web.Mvc.WebViewPage <TModel> .Model '
Nick Kahn

@Abu Hamzah कृपया मेरे अद्यतन उत्तर में अंतिम पैराग्राफ देखें।
टॉमी

11

मैं अपने कोड में इस बदलाव का उपयोग कर रहा हूं:

पुराना कोड:

 <td>
  @Html.DisplayFor(modelItem => item.dataakt)
 </td>

नया :

<td>
 @Convert.ToDateTime(item.dataakt).ToString("dd/MM/yyyy")
</td>

... तथा? यह एक उत्तर है या क्या?
मैकीज जुरेस्को

हां, यह केवल विषय से समस्या का समाधान है। मैंने सोचा कि यह किसी के लिए उपयोगी हो सकता है।
पिओर Mirek

ठीक है, मैं आपको सुझाव देता हूं कि "मैं अपने कोड में इस परिवर्तन का उपयोग कर रहा हूं" विशेष रूप से यह कहते हुए कि यह एक समाधान है।
Maciej Jureczko

सरल और सुविधाजनक जवाब, मेरे लिए काम किया धन्यवाद !!
स्कैनर

6

@ डिस्प्ले टेम्पलेट के उपयोग के बारे में क्रिसप्रैट का जवाब गलत है। इसे काम करने का सही कोड है:

@model DateTime?

@if (Model.HasValue)
{
    @Convert.ToDateTime(Model).ToString("MM/dd/yyyy")
}

ऐसा इसलिए है क्योंकि है .ToString()के लिए Nullable<DateTime>स्वीकार नहीं करता है Formatपैरामीटर


5

मैंने इस तरह की चीज़ को लागू किया:

  1. उपयोग TextBoxFor आवश्यक प्रारूप में तारीख को प्रदर्शित करने और क्षेत्र बनाने के लिए केवल पढ़ने के लिए
@Html.TextBoxFor(Model => Model.AuditDate, "{0:dd-MMM-yyyy}", new{@class="my-style", @readonly=true})

2. सीएसएस में TextBox को शून्य रूपरेखा और शून्य सीमा दें ।

.my-style {
    outline: none;
    border: none;
}

और ...... इसका किया :)


1
लेकिन आप ऐसा क्यों करेंगे?
कोडकास्टर

क्योंकि किसी भी अन्य तरीके ने मेरे लिए काम नहीं किया और इसने मुझे बहुत सारे कोडिंग से बचाया। इसके अलावा, अंतिम परिणाम आसानी से है और इसकी कोई सीमा नहीं है, इसलिए यह एक टेक्स्टबॉक्स की तरह नहीं देखा गया।
अक्षत

4

मेरे लिए यह उपयोग करने के लिए पर्याप्त था

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime StartDate { set; get; }

4

आप अपने डिस्प्ले मॉडल पर [ DisplayFormat ] विशेषता का उपयोग कर सकते हैं क्योंकि आप पूरी परियोजना के लिए इस प्रारूप को लागू करना चाहते हैं।

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
public Nullable<System.DateTime> Date { get; set; }

2

कुछ खुदाई के बाद और मैं स्थापित करने समाप्त हो गया Threadहै CurrentCulture मूल्य के लिए CultureInfo ( "en-US") नियंत्रक की कार्रवाई विधि में:

Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); 

यहां कुछ अन्य विकल्प दिए गए हैं यदि आप चाहते हैं कि यह सेटिंग हर दृश्य पर हो।

CurrentCultureसंपत्ति मूल्य के बारे में :

CultureInfo उद्देश्य यह है कि एक साथ उसके संबंधित वस्तुओं के साथ, इस संपत्ति के द्वारा दिया जाता है, दिनांक, समय, संख्या, मुद्रा मानों, पाठ की छंटाई क्रम आवरण सम्मेलनों, और स्ट्रिंग तुलना के लिए डिफ़ॉल्ट स्वरूप निर्धारण करते हैं।

स्रोत: एमएसडीएन करंटकल्चर

नोट: पिछली CurrentCultureसंपत्ति सेटिंग संभवतः वैकल्पिक है यदि नियंत्रक पहले से CultureInfo("en-US")या उसी तरह से चल रहा है जहां दिनांक प्रारूप है "MM/dd/yyyy"

CurrentCultureप्रॉपर्टी सेट करने के बाद , "M/d/yyyy"व्यू में प्रारूप की तारीख बदलने के लिए कोड ब्लॉक जोड़ें :

@{  //code block 
    var shortDateLocalFormat = "";
    if (Model.AuditDate.HasValue) {
       shortDateLocalFormat = ((DateTime)Model.AuditDate).ToString("M/d/yyyy");
       //alternative way below
       //shortDateLocalFormat = ((DateTime)Model.AuditDate).ToString("d");
    }
}

@shortDateLocalFormat

@shortDateLocalFormatचर के ऊपर ToString("M/d/yyyy")कार्यों के साथ स्वरूपित किया गया है। यदि ToString("MM/dd/yyyy")उपयोग किया जाता है, जैसे कि मैंने पहले किया था तो आप अंत में अग्रणी शून्य अंक रखते हैं । साथ ही टॉमी द्वारा अनुशंसित भी ToString("d")काम करता है। वास्तव में "शॉर्ट डेट पैटर्न""d" के लिए खड़ा है और विभिन्न संस्कृति / भाषा प्रारूपों के साथ भी इस्तेमाल किया जा सकता है।

मुझे लगता है कि ऊपर से कोड ब्लॉक को कुछ शांत सहायक विधि या समान के साथ प्रतिस्थापित किया जा सकता है ।

उदाहरण के लिए

@helper DateFormatter(object date)
{
    var shortDateLocalFormat = "";
    if (date != null) {     
        shortDateLocalFormat = ((DateTime)date).ToString("M/d/yyyy");
     }

    @shortDateLocalFormat
}

इस सहायक कॉल के साथ इस्तेमाल किया जा सकता है

@DateFormatter(Model.AuditDate)

अद्यतन , मुझे पता चला कि जब DateTime.ToString (स्ट्रिंग, IFormatProvider) विधि का उपयोग किया जाता है , तो वही काम करने का वैकल्पिक तरीका है। जब इस विधि का इस्तेमाल किया जाता है तो उपयोग करने के लिए कोई आवश्यकता नहीं है Threadकी CurrentCultureसंपत्ति। CultureInfo("en-US")दूसरा तर्क के रूप में पारित हो जाता है -> IFormatProvider लिए DateTime.ToString(String, IFormatProvider)विधि।

संशोधित सहायक विधि:

@helper DateFormatter(object date)
{
    var shortDateLocalFormat = "";
    if (date != null) {
       shortDateLocalFormat = ((DateTime)date).ToString("d", new System.Globalization.CultureInfo("en-US"));
    }

    @shortDateLocalFormat
}

.NET फेल्ड


1

शायद बस कोशिश करें

@(Model.AuditDate.HasValue ? Model.AuditDate.ToString("mm/dd/yyyy") : String.Empty)

भी आप कई प्रकार के स्ट्रिंग प्रारूप का उपयोग कर सकते हैं जैसे .ToString ("dd MMM, yyyy") .ToString ("d") आदि।


त्रुटि मिल रही है: घोषणा के साथ 'मॉडल' संघर्ष 'System.Web.Mvc.WebViewPage <TModel> .Model'
निक क्हान

अगर मैंने इसका इस्तेमाल @modelकिया है, तो पहचान नहीं है
निक कहन

@Abu Hamzah - MHTML पृष्ठ का उपयोग करते समय , इसकी राजधानी को गलत माना गया था, mघोषित करते समय कम मामला ।
टॉमी

अभी भी त्रुटि हो रही है, कृपया देखें कि मैं टॉमी के जवाब का जवाब देता हूं
निक कहन

1
No overload for method 'ToString' takes 1 argumentsशिकायत करते समय मैं उपयोग करता हूंToString("mm/dd/yyyy")
निक कहन

1

इसे देखें में बदलें:

@Html.DisplayFor(Model => Model.AuditDate.Value.ToShortDateString())

साथ में:

@if(@Model.AuditDate.Value != null){@Model.AuditDate.Value.ToString("dd/MM/yyyy")}
else {@Html.DisplayFor(Model => Model.AuditDate)}

स्पष्टीकरण: यदि ऑडिटडेट मान शून्य नहीं है, तो वह दिनांक को dd / MM / yyyy में रूपांतरित करेगा, अन्यथा इसे छोड़ दें क्योंकि इसका कोई मूल्य नहीं है।


0

मैं अपने नियंत्रक पर एक समान मुद्दा था और यहाँ मेरे लिए काम किया है:

model.DateSigned.HasValue ? model.DateSigned.Value.ToString("MM/dd/yyyy") : ""

"DateSigned" मेरे मॉडल से मूल्य है पंक्ति पढ़ता है, यदि मॉडल मूल्य का मूल्य है तो मूल्य को प्रारूपित करें, अन्यथा कुछ भी न दिखाएं।

उम्मीद है की वो मदद करदे


0

यह एक सरल तारीख स्ट्रिंग प्राप्त करने का सबसे अच्छा तरीका है:

 @DateTime.Parse(Html.DisplayFor(Model => Model.AuditDate).ToString()).ToShortDateString()

यहाँ यह जवाब क्या करता है: HtmlStringआउटपुट लेता है DisplayFor, इसे एक में रूपांतरित करता है , इसे एक के Stringरूप में पार्स करता है DateTime, फिर एक के रूप में प्रारूपित करता है String। अनावश्यक रूप से जटिल, मेरी राय में।
हेरिटेज मंकी


-1

त्रुटि के बारे में यह उत्तर देखें No overload for method 'ToString' takes 1 arguments

आप एक अशक्त DateTime को प्रारूपित नहीं कर सकते - आपको DateTime.Value गुण का उपयोग करना होगा।

@Model.AuditDate.HasValue ? Model.AuditDate.Value.ToString("mm/dd/yyyy") : string.Empty

टिप: इस सामान को मानक कक्षा में एक दृश्य में डालने से पहले एक मानक कक्षा के साथ काम करना हमेशा मददगार होता है। इस मामले में, आपको एक संकलित त्रुटि मिलेगी जो एक कक्षा में हाजिर करना आसान होगा।


अगर मैं सुझाए गए कोड का उपयोग करता हूं, तो यह त्रुटि हो रही है'Model' conflicts with the declaration 'System.Web.Mvc.WebViewPage<TModel>.Model'
Nick Kahn
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.