@ এইচটিএমএল.ডিসপ্লেফোর্ড - তারিখফর্ম্যাট ("মিমি / ডিডি / ইয়ে")


89

আমার কাছে নীচের রেজার কোড রয়েছে যা আমি 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"))

'টুস্ট্রিং' পদ্ধতির জন্য কোনও ওভারলোড 1 টি আর্গুমেন্ট নেয় না

উত্তর:


163

আপনি যদি ব্যবহার করেন 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
নিক কাহন

4
আমি মনে করি এটি হওয়া উচিত[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]

[ডিসপ্লেফর্ম্যাট (ডেটাফর্ম্যাটস্ট্রিং = "{0: ডিডি / এমএম / ইয়াই}")] তুরস্কের পক্ষে কাজ করেছেন ধন্যবাদ
জ্যাপো

@ ম্যাক: আপনার মানে কী? তারা খুব কি কাজ, কিন্তু আপনার নির্দিষ্ট দৃশ্যকল্প মধ্যে সম্ভবত শুধু। আরও তথ্য ছাড়া আমি বলতে পারি না আপনার পরিস্থিতি কী।
ক্রিস প্র্যাট

আপনি কি সম্পাদকটি aswell বিন্যাস ব্যবহার করতে চান তাহলে, অ্যাড ApplyFormatInEditMode = trueসম্পত্তিতে: [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]। এটি সুস্পষ্ট হওয়া উচিত, তবে যখন আপনি সমস্ত সময় নষ্ট-নষ্ট-অনুলিপি-পেস্ট করবেন যা ইন্টেলিজেন্স থেকে পাওয়া ইঙ্গিতটি আপনার নাক দিয়ে গেছে যেমন এটি আমার হয়েছিল :)
হেকি

19

আপনি যদি কেবলমাত্র সেই মডেলের বৈশিষ্ট্যের মান আউটপুট করে থাকেন তবে আপনার DisplayForএইচটিএমএল সহায়ক দরকার নেই , কেবল সঠিক স্ট্রিং ফর্ম্যাটিংয়ের মাধ্যমে সরাসরি এটি কল করুন

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

আউটপুট করা উচিত

Audit Date: 1/21/2015

শেষ অবধি, আপনার নিরীক্ষণের তারিখটি শূন্য হতে পারে, সুতরাং কোনও শনাক্তযোগ্য মান বিন্যাস করার চেষ্টা করার আগে আপনাকে শর্তযুক্ত চেক করা উচিত।

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

আপনি যে ত্রুটিটি পাচ্ছেন তা গুগল করা এই উত্তরটি সরবরাহ করে যা দেখায় যে ত্রুটিটি এইচটিএমএল সহায়কগুলির মধ্যে মডেল শব্দটি ব্যবহার করে। উদাহরণস্বরূপ, ব্যবহার করা হচ্ছে @Html.DisplayFor(Model=>Model.someProperty)Modelউদাহরণস্বরূপ, অন্য কিছু ব্যবহার করতে এগুলি @Html.DisplayFor(x=>x.someProperty)পরিবর্তন করুন : বা এই Mসহায়কগুলির mমধ্যে একটি বড় হাতের অক্ষরে রাজধানী পরিবর্তন করুন ।


4
যদি আমি ব্যবহার করি @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 '
নিক কানের

@ আববুহামজাহ দয়া করে আমার আপডেট করা উত্তরের শেষ অনুচ্ছেদটি দেখুন।
টমি

11

আমি আমার কোডে এই পরিবর্তনটি ব্যবহার করছি:

পুরানো কোড:

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

নতুন:

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

... এবং? এটি একটি উত্তর বা কি?
ম্যাকিয়েজ জুরেসকো

হ্যাঁ, এটি কেবল বিষয় থেকে সমস্যাটির সমাধান। আমি ভেবেছিলাম এটি কারও পক্ষে সহায়ক হতে পারে।
পাইটর মিরেক

ঠিক আছে, আমি আপনাকে "আমি আমার কোডটিতে এই পরিবর্তনটি ব্যবহার করে চলেছি" বা বিশেষভাবে উল্লেখ করে বলছি যে এটি একটি সমাধান suggest
ম্যাকিয়েজ জুরেস্কো

সহজ এবং সুবিধাজনক উত্তর, আমার জন্য ধন্যবাদ ধন্যবাদ !!
স্ক্যানার

ডেটাআক্ট টাইপ টাইম টাইম হলে সমস্যা?
ইমানুয়েল

6

ডিসপ্লে টেম্পলেট ব্যবহার সম্পর্কে ক্রিসপ্রেটের উত্তর ভুল। এটিকে কাজ করার সঠিক কোডটি হ'ল:

@model DateTime?

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

এটা এ কারণে যে এর .ToString()জন্য Nullable<DateTime>গ্রহণ করে না Formatপ্যারামিটার


5

আমি একইভাবে একই জিনিস বাস্তবায়ন করেছি:

  1. প্রয়োজনীয় বিন্যাসে তারিখ প্রদর্শন করতে এবং ক্ষেত্রটি কেবল পঠনযোগ্য করতে পাঠ্যবক্সফরফ ব্যবহার করুন ।
@Html.TextBoxFor(Model => Model.AuditDate, "{0:dd-MMM-yyyy}", new{@class="my-style", @readonly=true})

2. দাও শূন্য রূপরেখা এবং শূন্য সীমান্ত CSS এ পাঠ্যবাক্স করতে।

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

এবং ...... এটি সম্পন্ন :)


4
তবে আপনি কেন এমন করবেন?
কোডকাস্টার

কারণ অন্য কোনও পদ্ধতিই আমার পক্ষে কাজ করে নি এবং এটি আমাকে প্রচুর কোডিং থেকে বাঁচিয়েছে। এছাড়াও, শেষ ফলাফলটি কেবল পঠনযোগ্য এবং এর কোনও সীমানা নেই, সুতরাং এটি কোনও পাঠ্যবক্সের মতো লাগেনি।
অক্ষত


4

আপনি পুরো প্রকল্পের জন্য এই ফর্ম্যাটটি প্রয়োগ করতে চাইলে আপনি আপনার ভিউ মডেলটিতে [ ডিসপ্লে ফর্ম্যাট] বৈশিষ্ট্যটি ব্যবহার করতে পারেন ।

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

2

কিছু খনক পর আমি সেটিং শেষ পর্যন্ত Thread'র CurrentCulture মান আছে CultureInfo ( "স্বীকারোক্তি-মার্কিন") নিয়ামক এর কর্ম পদ্ধতিতে:

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

আপনি যদি প্রতিটি দৃশ্যে এই সেটিংটি রাখতে চান তবে এখানে কিছু অন্যান্য বিকল্প রয়েছে

CurrentCultureসম্পত্তি মান সম্পর্কে :

CultureInfo বস্তু একসাথে এর সাথে সংশ্লিষ্ট অন্যান্য বস্তুর সঙ্গে, এই সম্পত্তি ফিরিয়ে দেওয়া হয়, তারিখ, সময়, সংখ্যা, মুদ্রা মান, লেখার সাজানোর ক্রম, আবরণ সাধারণ প্রথা ও স্ট্রিং তুলনা জন্য ডিফল্ট বিন্যাস নির্ধারণ করে।

সূত্র: এমএসডিএন কারেন্ট কালচার

দ্রষ্টব্য: পূর্ববর্তী CurrentCultureসম্পত্তি সেটিংটি সম্ভবত alচ্ছিক, যদি কন্ট্রোলার ইতিমধ্যে 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)

আপডেট , আমি জানতে পেরেছিলাম যে ডেটটাইম. টোস্ট্রিং (স্ট্রিং, আইফোর্মেটপ্রোভিডার) পদ্ধতি ব্যবহার করার সময় একই জিনিস করার বিকল্প উপায় আছে । যখন এই পদ্ধতিটি ব্যবহার করা হয় তখন 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
}

.নাইট ফিডল


1

সম্ভবত চেষ্টা করুন

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

এছাড়াও আপনি অনেক ধরণের স্ট্রিং ফর্ম্যাট ব্যবহার করতে পারেন যেমন। টুস্ট্রিং ("ডিডি এমএমএম, ইয়িই")। টুস্ট্রিং ("ডি") ইত্যাদি


ত্রুটিটি পাওয়া: 'মডেল' ঘোষণার সাথে দ্বন্দ্ব 'সিস্টেম. ওয়েবে.এমভিসি। ওয়েলভিউপেজ <টিমোডেল> .মডেল'
নিক কাহন

আমি যদি @modelএটি ব্যবহার করি তবে তা সনাক্ত করতে পারে না
নিক কাহন

@ আবুহমজাহ - আমি ভুল হয়ে গিয়েছিলাম, Mএইচটিএমএল পৃষ্ঠায় ব্যবহার করার সময় এটির রাজধানী , mযখন ঘোষণার সময় লোয়ার কেস হয় ।
টমি

তবুও ত্রুটিটি পেয়েছি, দয়া করে দেখুন আমি টমির জবাবটি উত্তর করছি
নিক কাহন

4
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 / yyy এ ফর্ম্যাট করবে, অন্যথায় এটিকে এটি হিসাবে ছেড়ে দিন কারণ এর কোনও মূল্য নেই।


0

আমার নিয়ামকটিতে আমার একই রকম সমস্যা ছিল এবং এটি আমার পক্ষে কাজ করেছে:

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

"তারিখ সাইনড "টি আমার মডেল থেকে মান The লাইনটি পড়ছে, যদি মডেলের মানটির একটি মান থাকে তবে মানটি বিন্যাস করুন, অন্যথায় কিছুই দেখান না।

আশা করি এইটি কাজ করবে


0

সাধারণ তারিখের স্ট্রিংয়ের জন্য এটি সর্বোত্তম উপায়:

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

এই উত্তরটি যা করে তা এখানে: HtmlStringআউটপুটকে এটি দ্বারা DisplayForরূপান্তর করে , এটিকে রূপান্তর করে , এটিকে Stringপার্স করে DateTime, তারপরে এটিকে ফর্ম্যাট করে String। অযথা জটিল, আমার মতে।
হেরেটিক বানর

0

আপনি রূপান্তর ব্যবহার করতে পারেন

 <td>@Convert.ToString(string.Format("{0:dd/MM/yyyy}", o.frm_dt))</td> 

-1

ত্রুটি সম্পর্কে এই উত্তর দেখুন No overload for method 'ToString' takes 1 arguments

আপনি কোনও বাতিলযোগ্য তারিখটাইম ফর্ম্যাট করতে পারবেন না - আপনাকে ডেটটাইম.ভ্যালু সম্পত্তিটি ব্যবহার করতে হবে।

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

পরামর্শ: এই স্টাফটিকে একটি দৃশ্যে রাখার আগে ইন্টেলিজেন্স সহ একটি স্ট্যান্ডার্ড ক্লাসে কাজ করা সর্বদা সহায়ক। এই ক্ষেত্রে, আপনি একটি সংকলন ত্রুটি পাবেন যা কোনও শ্রেণিতে স্পষ্ট করা সহজ হবে।


যদি আমি প্রস্তাবিত কোডটি ব্যবহার করি তবে এই ত্রুটিটি পেয়েছি'Model' conflicts with the declaration 'System.Web.Mvc.WebViewPage<TModel>.Model'
নিক কাহন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.