কেবলমাত্র পাঠ্যবক্সফোর্ড () থেকে তারিখ


271

টেক্সটবক্সফোর্স <,> (এক্সপ্রেশন, এইচটিএমএলঅ্যাট্রিবিউটস) ব্যবহার করে ডেটটাইমের একমাত্র তারিখের অংশটি পাঠ্যবক্সে প্রদর্শন করতে আমার সমস্যা হচ্ছে।

মডেলটি লিনক 2 এসকিউএল ভিত্তিক, ক্ষেত্রটি এসকিউএল এবং সত্ত্বার মডেলটিতে একটি ডেটটাইম।

ব্যর্থ হয়েছে:

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

এই কৌশলটি অবহেলিত বলে মনে হচ্ছে, এইচটিএমএলঅ্যাট্রিবিউটে অবজেক্টের কোনও স্ট্রিং মান উপেক্ষা করা হবে।

ব্যর্থ হয়েছে:

[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
তবে এখন জ্যাকুই ইউআই ডেটপিকারটি এই ইনপুটটিতে প্রয়োগ করা যাবে না, কারণ এটি আমার @ শ্রেণি = "ডেটপিকার" বৈশিষ্ট্যগুলিকে এইচটিএমএল.এডিটরফোর্ড () সহায়ক হিসাবে উল্লিখিত উপেক্ষা করছে। সুতরাং এই পাঠ্যবক্সটি এখন সঠিকভাবে ফর্ম্যাট করে, তবে ক্লিক করার পরে ডেটপিকারটি আরম্ভ করে না। সুতরাং এটির একটি নির্দিষ্ট জিনিস এবং অন্যটি ভেঙে গেছে।
অ্যারন

5
এই সমাধানের সাথে সামঞ্জস্য রেখে আমি এটি কীভাবে পেতে পারি, তবে এটি এটিও এইচটিএমএল এর মতো করে ডেটপিকারটি চালু করতে পারে। টেক্সটবক্সের জন্য ()
অ্যারন

49
আমি এমভিসি 4 রেজার সিনট্যাক্স ব্যবহার করছি, তারিখের ক্ষেত্রটি রেন্ডার করা হয় @Html.EditorFor(m => m.IssueDate)এবং মডেলটিতে ফর্ম্যাটিং প্রয়োগ করা হয় [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}" )]তবে তারিখটি এখনও প্রদর্শিত হয়01/01/0001 12:00:00 AM
বাজন

4
@ অ্যারন এডিটরফোর্ডের কোনও ওভারলোড নেই যাতে এইচটিএমএলঅ্যাট্রিবিউটস প্যারামিটার রয়েছে। আপনি সম্ভবত এইচটিএমএলঅ্যাট্রিবিউটস পাস করছেন ভেবে এইটিকে ভিউ টেম্পলেট প্যারামিটার বা কোনও কিছুর মধ্যে দিয়ে যাচ্ছেন। এটি সম্পাদকফোরের অসুবিধা। টেক্সটবক্সফোর্ড ডিসপ্লে ফরম্যাট টীকা উপেক্ষা করে। অ্যালেক্সেসের সমাধান এর চারপাশে কাজ করার জন্য ফর্ম্যাটটিকে আলাদাভাবে প্রয়োগ করে।
অ্যারোনএলএস

362

এমভিসি 4 একটি নতুন TextBoxForওভারলোড যুক্ত করে এই সমস্যার সমাধান করেছে , যা স্ট্রিং বিন্যাসের প্যারামিটার নেয়। আপনি এখন সহজভাবে এটি করতে পারেন:

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

এখানে একটি ওভারলোডও রয়েছে যা এইচটিএমএল বৈশিষ্ট্য গ্রহণ করে, তাই আপনি সিএসএস শ্রেণি সেট করতে পারেন, ডেটপিকারগুলি তারে রাখতে পারেন ইত্যাদি:

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

40
এটি এমভিসি 4 এর সেরা উত্তর - এটি আমাকে jquery ইউআই ডেটপিকার ব্যবহার করতে এবং নির্বাচনটি ফর্ম্যাট করে এটি করার অনুমতি দেয়:@Html.TextBoxFor(m => m.SomeDate, "{0:MM/dd/yyyy}", new { @id="datepicker" })
এরিক

3
ধন্যবাদ! তবে এটি একটি বাগের মতো মনে হচ্ছে যে টেক্সটবক্সফোর্ড মডেলের [DisplayFormat]বৈশিষ্ট্যটিকে উপেক্ষা করবে । টেক্সটবক্সফোর্ডে কমপক্ষে একটি ওভাররাইড আছে (এবং আপনি এটি সম্পর্কে আমাকে সতর্ক করেছেন) খুশী।
নিল ল্যাসলেট

7
আমি এটি সেট @Html.TextBoxFor(model => model.CDate, "{0:dd.MM.yyyy}")করে রেখেছি তবে এইচটিপি পোস্টে আমি এমএম.ডিডি.ইআইআই এর মতো ডেটা পাই। কীভাবে সমাধান করবেন?
ব্যবহারকারী007

3
আমি তোমাকে বিয়ার কিনছি! এই উত্তরটি খুঁজে না পাওয়া পর্যন্ত এই ছোট্ট সমস্যাটি আমাকে এমন মাথাব্যথার কারণ করেছে।
JoshYates1980

3
অবগতির জন্য : অনেক ব্রাউজার এবং 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
এডিটরফোর্ড সলিউশন কাজ করে, যখন আপনাকে আইডি বা ক্লাসের মতো অন্যান্য এইচটিএমএল বৈশিষ্ট্যগুলিকে ওভাররাইড করতে হবে except এটি একটি দুর্দান্ত সমাধান। অদ্ভুত যে ভিটি আপার কেস হওয়া দরকার।
বেন মিলস

1
নালটি নিরাপদে হ্যান্ডেল করতে, আপনি মডেল করতে পারেন ndএন্ডডেট.গেটভ্যালিউআরডিফল্ট () To মডেল.এন্ডডেটটি শূন্য হলে ডেটটাইমের ডিফল্ট মান প্রদর্শিত হবে।

15
নালস সম্পর্কে, ডেটটাইমটির ডিফল্ট মান 1901 সালের 1 লা জানুয়ারী, আমার মতে, এটি ব্যবহার করা ভাল হবে@Value = (Model.DateBecamePermanentResident == null ? "" : Model.DateBecamePermanentResident.Value.ToString("dd.MM.yyyy"))
সেরজ সাগান

1
@ স্পিকোলিন, এটি আমার জন্য দ্বিতীয় 'মান' বৈশিষ্ট্য তৈরি করে না (এমভিসি 3 / রেজার টেম্পলেট)।
ডগ এস

2
গুরুত্বপূর্ণ: "মান" এর মূলধন "ভি" এর জন্য চেক করুন, ছোট চিঠি আর করবে না!
তেজস্বী হেগদে

48

বা টাইপ করা সাহায্যকারী ব্যবহার করুন:

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

22
কিছুটা ভিন্নতা@Html.TextBoxFor(model => model.EndDate, "{0:d}", new { type = "date" })
ড্যান ফ্রেডম্যান

এটি এএসপিএক্স ভিউ ইঞ্জিনের পরিবর্তে রেজার ব্যবহার করে তবে তারা দুজনেই এমভিসি 4 এ কাজ করে এবং একটি সিনট্যাক্স থেকে অন্য সিন্ট্যাক্সে পরিবর্তন করা তুচ্ছ। আমি রেজার কারণটিতে পোস্ট করেছিলাম এটিই আমি ব্যবহার করেছি এবং পরীক্ষা করেছি। আমি যেমন বলেছি, এটি একটি ভিন্নতা।
ড্যান ফ্রাইডম্যান

1
@ ড্যান ফ্রিডম্যান: এটি আমার পক্ষে যাওয়ার উপায় ছিল! আমি একটি সম্পাদক টেম্পলেট দিয়ে কাজ করতাম, তবে তারপরে আমাকে নিজের এইচটিএমএলও তৈরি করতে হয়েছিল এবং সমস্ত বৈধতা বার্তা এবং সমস্ত বুটস্ট্র্যাপ বৈশিষ্ট্যও অন্তর্ভুক্ত ছিল, সুতরাং এটি আমার পক্ষে যাওয়ার সত্যিকারের উপায় (asp.net mvc5)
মিশেল

1
আপনি কি একটি নতুন সমস্যা এবং বিস্তারিত তৈরি করতে পারেন। আমাকে ট্যাগ করুন এবং আমি সাহায্য করে খুশি হব।
ড্যান ফ্রাইডম্যান

1
আপনার বিশ্বায়নের প্রয়োজন হলে এই সমাধানটি সেরা।
alansiqueira27

26

এটি আমার পক্ষে কাজ করেছে।

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

12

কাঁচা এইচটিএমএল ব্যবহার করে ভয় পাবেন না।

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

4
তখন কীভাবে সে পোস্ট করবে? কারণ তারিখটি প্রায় অবশ্যই সার্ভারে আবার বিশ্লেষণ করবে না।
রবার্ট কোরিটনিক

10
যতক্ষণ আপনি যথাযথ 'নাম = "স্টার্টডেট" "অন্তর্ভুক্ত করেন ততক্ষণ মডেল বাইন্ডার এটিকে বেছে নেবে।
নাসপিনস্কি

এমডিসি 3- এ আমার জন্য একমাত্র কাজড্রোক জোকপাপু worker এটি হ'ল আমি কোনওভাবেই মান তৈরি করতে TextBoxForবা EditorForফর্ম্যাট করতে ব্যর্থ হয়েছি । আমার প্রশ্নটি দেখুন: টেক্সটবক্সের জন্য সহায়ক দিন এবং মাসের সাথে তারিখগুলিতে
মিশে যায়

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")


ব্যাখ্যা:

এইচটিএমএল inputউপাদানের তারিখটি ISO8601 এরdate ক্ষেত্রে ফর্ম্যাট করতে হবে , যা হ'ল:yyyy-MM-dd

প্রদর্শিত তারিখটি ব্যবহারকারীর ব্রাউজারের লোকেলের ভিত্তিতে ফর্ম্যাট করা হয় তবে পার্সড মানটি সর্বদা yyyy-mm-dd ফর্ম্যাট হয়।

আমার অভিজ্ঞতা হ'ল যে ভাষাটি Accept-Languageশিরোনাম দ্বারা নির্ধারিত হয় না , তবে ব্রাউজারের প্রদর্শনের ভাষা বা ওএস সিস্টেমের ভাষা দ্বারা হয়।


4

আপনি এই ডেটা টিকাটি প্রয়োগ করে এইচটিএমএল 5 টি বৈশিষ্ট্যও ব্যবহার করতে পারেন:

[DataType(DataType.Date)]

তবে সমস্যাটি হ'ল এইচটিএমএল 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

ডিসপ্লেফর্ম্যাট বৈশিষ্ট্যটি প্রাথমিক লোডের পরে কোনও রূপে আমার পক্ষে কাজ করে না। আমি পরিবর্তে একটি এডিটর টেম্পলেট তৈরি করেছি:

<%@ 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

আপনি যদি বুটস্ট্র্যাপের তারিখ চয়নকারী ব্যবহার করে থাকেন তবে নীচের হিসাবে আপনি কেবল ডাটা_ডেট_ফর্ম্যাট বৈশিষ্ট্য যুক্ত করতে পারেন ।

      @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.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

এএসপি.নেট কোরে ট্যাগ হেল্পার ব্যবহার করার সময়, ফর্ম্যাটটি আইএসও ফর্ম্যাটে নির্দিষ্ট করা দরকার। যদি এরূপ হিসাবে নির্দিষ্ট না করা থাকে তবে আবদ্ধ ইনপুট ডেটা সঠিকভাবে প্রদর্শিত হবে না এবং মিমি / ডিডি / ইয়াই হিসাবে কোনও মান ছাড়াই প্রদর্শিত হবে।

মডেল:

[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" />

এএসপি-ফর্ম্যাট বৈশিষ্ট্যটি ব্যবহার করে বিন্যাসটিও ভিউতে নির্দিষ্ট করা যায়।

ফলস্বরূপ এইচটিএমএল নীচের মত দেখতে পাবেন:

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

0

আপনি এইচএইচ: মিমি ফর্ম্যাটটিতে সময় প্রিন্ট করতে কোডের নীচে ব্যবহার করতে পারেন , আমার ক্ষেত্রে সম্পত্তি টাইপ টাইমস্প্যান তাই মানটি এইচএইচ: মিমি: টিটি ফর্ম্যাটে আসবে তবে আমাকে উপরের ফর্ম্যাটটিতে প্রদর্শন করতে হবে। এইচ: মিমি

সুতরাং আপনি এই কোডটি ব্যবহার করতে পারেন:

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

0

আপনি যদি [DisplayFormat]ব্যবহারটি করার জন্য জিদ করেন তবে আপনি এমভিসি 4 ব্যবহার করছেন না, আপনি এটি ব্যবহার করতে পারেন:

@Html.TextBoxFor(m => m.EndDate, new { Value = @Html.DisplayFor(m=>m.EndDate), @class="datepicker" })
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.