強力なタイプされたビューでヌル可能なデータタイムフィールドをフォーマットします

StackOverflow https://stackoverflow.com/questions/3684015

質問

私のモデルには、次のように定義されたモデルに生まれた財産を持つ人のクラスがあります

[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」)。 Nullableフィールドであるため、フォーマット文字列でTostringメソッドを使用することはできません。

私に何ができる?

役に立ちましたか?

解決

価値を使用できるはずです。最初にnullではないことを確認してください。

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

これを行うことができます、それはnullableモデルタイプで動作します:

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

この問題に取り組んだもう1つの方法は、TextBoxforに形式を追加することです

@Html.TextBoxFor(model => model.BornDate, "{0:MM/dd/yyyy}", new { id = "bornDate" })
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top