سؤال

لدي فئة شخص مع ممتلكات ولد في النموذج الخاص بي المعرّفة على أنها

[DisplayName("Born Date")]
public DateTime? BornDate { get; set; }

أستخدم هذا الحقل في رأيي كما

<td style="white-space:nowrap">
    <%= Html.LabelFor(model => model.BornDate)%>
    <br />
    <%= Html.TextBoxFor(model => model.BornDate, new { id = "bornDate" })%>
    <%= Html.ValidationMessageFor(model => model.BornDate, "*")%>
</td>

المشكلة هي أنه عندما أقوم بتحرير مثيل شخص مع مربع نص Borndate يتم تنسيقه على أنه

dd/MM/yyyy hh.mm.ss

بينما أرغب في تنسيقه بدون الجزء الزمني ("DD/MM/YYYY"). أنا غير قادر على استخدام طريقة toString مع سلسلة التنسيق لأنها حقل لاجل.

ماذا يمكنني أن أفعل؟

هل كانت مفيدة؟

المحلول

يجب أن تكون قادرًا على استخدام القيمة. فقط تحقق من أنه ليس فارغًا أولاً.

var displayDate = model.BornDate.HasValue ? model.BornDate.Value.ToString("yyyy") : "NoDate";

نصائح أخرى

أعلم أن هذا متأخر جدًا لكنني كنت أبحث عن مشكلة أخرى وصادفت هذه القضية. هناك طريقة لإظهار جزء التاريخ فقط الذي لا يتطلب تنسيق طبقة العرض التقديمي.

[DisplayName("Born Date")]
[DataType(DataType.Date)]
public DateTime? BornDate { get; set; }

سيضمن استخدام هذا أنه في كل مكان ترتبط به هذه الخاصية على عرضك ، سيظهر التاريخ فقط

أتمنى أن يساعد هذا شخصًا ما

للقيام بذلك في عرضك ، يمكنك استخدام بناء جملة Razor أيضًا:

 @Html.TextBox("BornDate", item.BornDate.HasValue ? item.BornDate.Value.ToShortDateString():"") 

يمكنك القيام بذلك ، وسيعمل مع أنواع النماذج الباطئة:

@model DateTime?
@{
    object txtVal = "";
    if (Model.HasValue) 
    {
        txtVal = Model.Value;
    };
}
@Html.TextBoxFor(x => Model, new {Value = string.Format(ViewData.ModelMetadata.EditFormatString, txtVal))

هناك طريقة أخرى تعاملت مع هذه المشكلة عن طريق إضافة تنسيق إلى مربع النص

@Html.TextBoxFor(model => model.BornDate, "{0:MM/dd/yyyy}", new { id = "bornDate" })
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top