केवल टेक्स्टबॉक्स से दिनांक ()


271

मुझे TextBoxFor <,> (अभिव्यक्ति, htmlAttributes) का उपयोग करके एक टेक्स्टबॉक्स में डेटाइम का एकमात्र तारीख भाग प्रदर्शित करने में परेशानी हो रही है।

मॉडल Linq2SQL पर आधारित है, क्षेत्र SQL पर और इकाई मॉडल में एक दिनांक समय है।

अनुत्तीर्ण होना:

<%= Html.TextBoxFor(model => model.dtArrivalDate, String.Format("{0:dd/MM/yyyy}", Model.dtArrivalDate))%>

यह ट्रिक मूल्यह्रास प्रतीत होती है, ऑब्जेक्ट htmlAttribute में किसी भी स्ट्रिंग मान को अनदेखा किया जाता है।

अनुत्तीर्ण होना:

[DisplayFormat( DataFormatString = "{0:dd/MM/yyyy}" )]
public string dtArrivalDate { get; set; }

मैं "00:00:00" भाग के बिना विवरण / संपादित दृश्य पर केवल दिनांक भाग को संग्रहीत और प्रदर्शित करना चाहूंगा।

जवाबों:


237
[DisplayName("Start Date")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
public DateTime StartDate { get; set; }

फिर:

<%=Html.EditorFor(m => m.StartDate) %>

हां, जैसा कि अब एडिटरफॉर हेल्पर है और एमवीसी 2 को अंतिम रूप दिया गया है, आपका समाधान रास्ता तय करना है
क्रोनोस

66
लेकिन अब Jquery UI डेटपिकर को इस इनपुट पर लागू नहीं किया जा सकता है, क्योंकि यह Html.EditorFor () हेल्पर के रूप में मेरे @ वर्ग = "डेटपिकर" विशेषताओं को अनदेखा कर रहा है। इसलिए यह टेक्स्टबॉक्स अब सही तरीके से फॉर्मेट करता है, लेकिन क्लिक होने पर डेटकिकर लॉन्च नहीं करता है। तो इसकी एक बात तय हो गई और दूसरा टूट गया।
एरोन

5
मैं इसे इस समाधान के अनुरूप प्रदर्शित करने के लिए कैसे प्राप्त कर सकता हूं, लेकिन क्या इसने डेटपिकर को भी लॉन्च किया है जैसे कि इसे Html.TextboxFor () के साथ
हारून

49
मैं एमवीसी 4 रेजर सिंटैक्स का उपयोग कर रहा हूं, दिनांक फ़ील्ड के रूप में प्रस्तुत किया गया है @Html.EditorFor(m => m.IssueDate)और मॉडल पर प्रारूपण के रूप में लागू किया गया है [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}" )]लेकिन तारीख अभी भी दिखाई गई है01/01/0001 12:00:00 AM
भजन

4
@Aaron EditorFor का कोई अधिभार नहीं है जिसमें htmlAttributes पैरामीटर है। आप शायद इसे viewTemplate पैरामीटर या किसी चीज़ में पास कर रहे हैं, यह सोचकर कि आप htmlAttributes पास कर रहे हैं। यह Editorfor का नुकसान है। TextBoxFor DisplayFormat एनोटेशन की उपेक्षा करता है। अलेक्सईएसएस का समाधान इसके चारों ओर काम करने के लिए प्रारूप को अलग तरह से लागू करता है।
एरोनल्स

362

MVC4 ने एक नए TextBoxForअधिभार को जोड़कर इस समस्या को हल किया है , जो एक स्ट्रिंग प्रारूप पैरामीटर लेता है। अब आप बस यह कर सकते हैं:

@Html.TextBoxFor(m => m.EndDate, "{0:d MMM yyyy}")

वहाँ भी एक अधिभार है जो html विशेषताएँ लेता है, ताकि आप CSS वर्ग, तार अप डेटापिकर्स, आदि सेट कर सकें:

@Html.TextBoxFor(m => m.EndDate, "{0:d MMM yyyy}", new { @class="input-large" })

40
MVC4 के लिए यह सबसे अच्छा जवाब है - यह मुझे jquery UI डेटपिकर का उपयोग करने की अनुमति देता है और ऐसा करने वाले चयन को प्रारूपित करता है:@Html.TextBoxFor(m => m.SomeDate, "{0:MM/dd/yyyy}", new { @id="datepicker" })
ericb

3
धन्यवाद! लेकिन यह एक बग की तरह लगता है कि TextBoxFor मॉडल की [DisplayFormat]विशेषता को अनदेखा करता है । खुशी है कि TextBoxFor में कम से कम एक ओवरराइड है (और आपने मुझे इसके लिए सचेत किया है)।
नील लासलेट

7
मैं इसे इस तरह सेट करता हूं @Html.TextBoxFor(model => model.CDate, "{0:dd.MM.yyyy}")लेकिन httpPost पर मुझे MM.dd.yyyy जैसा डेटा मिलता है। इसे कैसे हल करें?
user007

3
मैं तुम्हें एक बीयर खरीद रहा हूँ! इस छोटे से मुद्दे ने मुझे इस तरह का सिरदर्द पैदा कर दिया जब तक मुझे यह जवाब नहीं मिला।
जोशिएट्स १

3
FYI करें : कई ब्राउज़रों और input[type=date]युक्ति को "{0:yyyy-MM-dd}"प्रारूप की आवश्यकता होती है।
काइलमिट सिट

259
<%= Html.TextBoxFor(model => model.EndDate, new { @class = "jquery_datepicker", @Value = Model.EndDate.ToString("dd.MM.yyyy") })%>

5
EditorFor समाधान तब काम करता है, जब आपको आईडी या क्लास जैसी अन्य HTML विशेषताओं को ओवरराइड करने की आवश्यकता होती है। यह एक बेहतरीन उपाय है। अजीब बात है कि वी को ऊपरी मामला होने की आवश्यकता है।
बेन मिल्स

1
नल को सुरक्षित रूप से संभालने के लिए, आप Model.EndDate.GetValueOrDefault ()! ToString ("dd.MM.yyyy") कर सकते हैं। यदि Model.EndDate शून्य है, तो डेटाटाइम का डिफ़ॉल्ट मान प्रदर्शित किया जाएगा।

15
Nulls के बारे में, डेटटाइम का डिफ़ॉल्ट मान 1901 का 1 जनवरी है, मेरी राय में, इसका उपयोग करना बेहतर होगा@Value = (Model.DateBecamePermanentResident == null ? "" : Model.DateBecamePermanentResident.Value.ToString("dd.MM.yyyy"))
सर्ज सगन

1
@Spikolynn, यह मेरे लिए (MVC3 / रेजर टेम्पलेट) के लिए एक दूसरा 'मूल्य' विशेषता उत्पन्न नहीं करता था।
डग एस

2
छवि: "मूल्य" में कैपिटल "वी" के लिए जाँच करें, छोटे अक्षर अभ्यस्त!
तेजस्वी हेगड़े ६

48

या अशिक्षित सहायकों का उपयोग करें:

<%= Html.TextBox("StartDate", string.Format("{0:d}", Model.StartDate)) %>

22
थोड़ा सा बदलाव@Html.TextBoxFor(model => model.EndDate, "{0:d}", new { type = "date" })
डैन फ्रेडमैन

यह ASPX दृश्य इंजन के बजाय रेजर का उपयोग करता है, लेकिन वे दोनों एमवीसी 4 में काम करते हैं और एक सिंटैक्स से दूसरे में बदलना तुच्छ है। मैं उस्तरा कारण में तैनात है कि मैं क्या इस्तेमाल किया और के साथ परीक्षण किया है। जैसा मैंने कहा, यह एक भिन्नता है।
डैन फ्रीडमैन

1
@ डान फ्राइडमैन: यह मेरे लिए जाने का रास्ता था! मैं एक संपादक टेम्पलेट के साथ काम करता था, लेकिन फिर मुझे अपना स्वयं का html भी बनाना था और सभी सत्यापन संदेश और सभी बूटस्ट्रैप विशेषताओं को भी शामिल करना था, इसलिए यह वास्तव में मेरे लिए जाने का रास्ता है (asp.net mvc5)
मिशेल

1
क्या आप एक नया मुद्दा और विस्तार कर सकते हैं कि आपने क्या किया है। मुझे टैग करें और मुझे मदद करने में खुशी होगी।
डैन फ्राइडमैन

1
यह समाधान सबसे अच्छा है जब आपको वैश्वीकरण की आवश्यकता होती है।
alansiqueira27

26

इसने मेरे लिए काम किया।

@Html.TextBoxFor(m => m.DateOfBirth, "{0:MM/dd/yyyy}", new { size = "12", @class = "DOB", tabindex = 121 })

12

कच्चे HTML का उपयोग करने से डरो मत।

<input type="text" value="<%= Html.Encode(Model.SomeDate.ToShortDateString()) %>" />

4
फिर वह इसे वापस कैसे पोस्ट करेगा? क्योंकि दिनांक लगभग निश्चित रूप से सर्वर पर वापस प्राप्त नहीं होगा।
रॉबर्ट कोरिटनिक

10
जब तक आप उचित 'नाम = "प्रारंभ करें" शामिल करते हैं, तब तक मॉडल बाइंडर इसे उठाएगा।
naspinski

@DrJokepu MVC3 पर मेरे लिए एक ही चीज़ है। मैं किसी भी तरह से मूल्य बनाने TextBoxForया EditorForप्रारूपित करने में विफल रहा हूं । मेरा प्रश्न देखें: TextBoxFor सहायक दिन और महीने की तारीखों में
घुल

10

टी एल; डॉ;

@Html.TextBoxFor(m => m.DOB,"{0:yyyy-MM-dd}", new { type = "date")

को लागू करने [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]से मेरे लिए बाहर काम नहीं किया!


स्पष्टीकरण:

अपने मॉडल का उपयोग करके दिनांक संपत्ति प्रदर्शित करने के लिए Html.TextBoxFor:

यहां छवि विवरण दर्ज करें

आपके मॉडल वर्ग की दिनांक संपत्ति:

public DateTime DOB { get; set; }

मॉडल पक्ष में और कुछ नहीं चाहिए।


रेजर में आप करते हैं:

@Html.TextBoxFor(m => m.DOB,"{0:yyyy-MM-dd}", new { type = "date")


स्पष्टीकरण:

ISO8601input प्रकार की HTML तत्व की तिथि dateको ISO8601 के संदर्भ में प्रारूपित किया जाना चाहिए , जो है:yyyy-MM-dd

प्रदर्शित तिथि को उपयोगकर्ता के ब्राउज़र के स्थान के आधार पर स्वरूपित किया जाता है, लेकिन पार्स किए गए मान को हमेशा yyyy-mm-dd स्वरूपित किया जाता है।

मेरा अनुभव है, कि भाषा Accept-Languageहेडर द्वारा निर्धारित नहीं की जाती है , लेकिन या तो ब्राउज़र डिस्प्ले भाषा या ओएस सिस्टम भाषा द्वारा।


4

आप इस डेटा एनोटेशन को लागू करके HTML 5 विशेषताओं का भी उपयोग कर सकते हैं:

[DataType(DataType.Date)]

लेकिन समस्या यह है कि यह HTML 5 ब्राउज़रों के लिए एक ब्राउज़र विशिष्ट तिथि पिकर सक्षम करता है। आपको अभी भी समर्थन के बिना ब्राउज़रों के लिए अपनी स्वयं की तिथि पिकर की आवश्यकता है, और फिर आपको यह सुनिश्चित करना होगा कि आपकी तिथि पिकर ब्राउज़र के अतिरिक्त नहीं दिखाई देती है (मॉर्डनिजर यह आसानी से कर सकता है), या ब्राउज़र को छिपाता है यदि यह करता है (जटिल और मैं न जाने कितनी विश्वसनीय विधियाँ मैंने देखीं)।

अंत में मैं एलेक्स के साथ चला गया क्योंकि मेरे वर्तमान परिवेश में मॉर्डनिज़्र नहीं है, लेकिन अगर ऐसा होता है, तो मैं इसका इस्तेमाल करता कि सशर्त रूप से केवल अपने डेटा पिकर को दिखाऊं यदि ब्राउज़र पहले से ही समर्थन नहीं करता।


3

मेरे लिए, मुझे इनपुट प्रकार की तारीख में परिवर्तन का TextboxFor()उपयोग करके रखने की आवश्यकता है EditorFor()। जो, क्रोम में, एक बिल्ट इन डेट पिकर जोड़ता है, जो पहले से ही उपयोग कर रहे jQuery डेटपिकर को खराब कर देता है। इसलिए, TextboxFor()तारीख का उपयोग करने और केवल उत्पादन जारी रखने के लिए, आप यह कर सकते हैं:

<tr>
    <td class="Label">@Html.LabelFor(model => model.DeliveryDate)</td>
    @{
        string deliveryDate = Model.DeliveryDate.ToShortDateString();
    }
    <td>@Html.TextBoxFor(model => model.DeliveryDate, new { @Value = deliveryDate }) *</td>
    <td style="color: red;">@Html.ValidationMessageFor(model => model.DeliveryDate)</td>
</tr>

1

DisplayFormat विशेषता प्रारंभिक लोड पर मेरे लिए किसी भी रूप में काम नहीं करती थी। मैंने इसके बजाय एक EditorTemplate बनाया:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.DateTime>" %>
<%@ Import Namespace="System.Web.Mvc.Html" %>
<%=
    Html.TextBox("", Model.ToShortDateString(), new { @class = "date-range" }) %>

1

टेम्प्लेट एडिटर केवल प्रदर्शन उद्देश्यों के लिए काम करेगा। यदि आप एक ही संपादक का उपयोग करते हैं (जो इसका अर्थ है क्योंकि इसका एक संपादक है) और आपने 31/01/2010 जैसे मूल्य की आपूर्ति की है - आपको यह कहते हुए एक त्रुटि संदेश मिलेगा कि प्रारूप अमान्य है।


1

मैं ग्लोबलाइज़ का उपयोग करता हूं इसलिए कई दिनांक प्रारूपों के साथ काम करें ताकि निम्नलिखित का उपयोग करें:

@Html.TextBoxFor(m => m.DateOfBirth, "{0:d}")

यह ब्राउजर की लोकेल सेटिंग में डेट फॉर्मेट को ऑटोमैटिकली एडजस्ट कर देगा।


1

ध्यान रखें कि प्रदर्शन संस्कृति पर निर्भर करेगा। और जबकि ज्यादातर मामलों में अन्य सभी उत्तर सही होते हैं, यह मेरे लिए काम नहीं करता था। यदि संलग्न है, तो संस्कृति समस्या jQuery डेटपिकर के साथ अलग-अलग समस्याएं पैदा करेगी।

यदि आप प्रारूप /को निम्नलिखित तरीके से भागने के लिए मजबूर करना चाहते हैं :

@Html.TextBoxFor(model => model.dtArrivalDate, "{0:MM\\/dd\\/yyyy}")

अगर मेरे लिए बच नहीं गया तो यह 08-01-2010उम्मीद के मुताबिक है08/01/2010

इसके अलावा, यदि नहीं बच गया है तो jQuery डेटपिकर अलग डिफ़ॉल्ट का चयन करेगा, मेरे उदाहरण में यह था May 10, 2012


1

यदि आप बूटस्ट्रैप तिथि पिकर का उपयोग कर रहे हैं, तो आप नीचे के रूप में data_date_format विशेषता जोड़ सकते हैं।

      @Html.TextBoxFor(m => m.StartDate, new { 
@id = "your-id", @class = "datepicker form-control input-datepicker", placeholder = "dd/mm/yyyy", data_date_format = "dd/mm/yyyy" 
})

0

// डेटाइम में डेटाइम लाइफ डिस्प्ले 11/24/2011 12:00:00 पूर्वाह्न है

// आप इसे अंतरिक्ष से विभाजित कर सकते हैं और केवल तारीख तक मान सेट कर सकते हैं

स्क्रिप्ट:

    if ($("#StartDate").val() != '') {
        var arrDate = $('#StartDate').val().split(" ");
        $('#StartDate').val(arrDate[0]);
    }

मार्कअप:

    <div class="editor-field">
        @Html.LabelFor(model => model.StartDate, "Start Date")
        @Html.TextBoxFor(model => model.StartDate, new { @class = "date-picker-needed" })
    </div>

उम्मीद है कि यह मदद करता है ..


7
आपका समाधान काम करना चाहिए। लेकिन मेरी विनम्र राय में, सर्वर साइड में जारी की गई स्ट्रिंग तिथि पर क्लाइंट की ओर से भरोसा करना खतरनाक हो सकता है। यदि सर्वर साइड पर क्षेत्रीय सेटिंग्स में दिनांक और समय के बीच कोई स्थान शामिल नहीं है, तो आपका उजागर समाधान विफल हो जाएगा।
क्रोनोस

0

सुनिश्चित करें कि आप Html.EditorFor का उपयोग कर सकते हैं। लेकिन अगर आप TextBoxFor का उपयोग करना चाहते हैं और DisplayFormat विशेषता से प्रारूप का उपयोग करना चाहते हैं, तो आप इसे इस तरह से उपयोग कर सकते हैं:

@Html.TextBoxFor(model => model.dtArrivalDate, ModelMetadata.FromLambdaExpression(model => model.dtArrivalDate, ViewData).EditFormatString)

या अगला एक्सटेंशन बनाएं:

public static class HtmlExtensions
{
    public static MvcHtmlString TextBoxWithFormatFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes)
    {
        return htmlHelper.TextBoxFor(expression, ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData).EditFormatString, htmlAttributes);
    }
}

0

बस अपने मॉडल के बगल में जोड़ें।

[DataType(DataType.Date)]
public string dtArrivalDate { get; set; }

0

ASP.NET कोर में टैग सहायकों का उपयोग करते समय, प्रारूप को आईएसओ प्रारूप में निर्दिष्ट किया जाना चाहिए। यदि ऐसा निर्दिष्ट नहीं किया गया है, तो बाध्य इनपुट डेटा ठीक से प्रदर्शित नहीं होगा और बिना किसी मूल्य के मिमी / dd / yyyy के रूप में दिखाई देगा।

नमूना:

[Display(Name = "Hire")]
[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
public DateTime? HireDate { get; set; }

राय:

<input asp-for="Entity.HireDate" class="form-control" />

प्रारूप को एस्प-प्रारूप विशेषता का उपयोग करके दृश्य में भी निर्दिष्ट किया जा सकता है।

परिणामी HTML इस प्रकार दिखेगा:

<input class="form-control" type="date" id="Entity_HireDate" 
    name="Entity.HireDate" value="2012-01-01">

0

आप HH: mm फॉर्मेट में समय प्रिंट करने के लिए नीचे दिए गए कोड का उपयोग कर सकते हैं , मेरे मामले में संपत्ति प्रकार TimeSpan है इसलिए मान HH: mm: tt प्रारूप में आ रहा है लेकिन मुझे उपरोक्त प्रारूप में दिखाना होगा। HH: mm

तो आप इस कोड का उपयोग कर सकते हैं:

@Html.TextBoxFor(x =>x.mTimeFrom, null, new {@Value =Model.mTimeFrom.ToString().Substring(0,5), @class = "form-control success" })

0

यदि आप उपयोग करने पर जोर देते हैं [DisplayFormat], लेकिन आप MVC4 का उपयोग नहीं कर रहे हैं, तो आप इसका उपयोग कर सकते हैं:

@Html.TextBoxFor(m => m.EndDate, new { Value = @Html.DisplayFor(m=>m.EndDate), @class="datepicker" })
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.