web-dev-qa-db-ja.com

MVC3&Razor-テキストボックスでDateTime文字列を「mm / dd / yyyy12:00:00AM」から「mm / dd / yyy」に変更します

DateTimeを使用する誕生日テキストフィールドに時刻が表示されないようにしようとしています

私のコード:(私はJqueryDatePickerを使用しています)

<label for="birthday">Birthday:</label>
            @Html.TextBox("birthday", (Model.Birthday.ToString()), new { @class = "datePicker" })

Javascript:

$(document).ready(function () {
    $('.datePicker').datepicker({ showOn: 'both', buttonImage: "/content/images/calendar-red.gif" });
});

日付のモデル設定があります:

[DataType(DataType.Date)]
public DateTime? Birthday { get; set; }

テキストボックスのテキストは表示されます:

「2010年8月21日12:00:00 AM」

テキストボックス内のテキストを次のように表示したい:

「2010年8月21日」

私はからすべてを試しました:

@inherits System.Web.Mvc.WebViewPage<System.DateTime>

私は@モデルを使用しているので、それをさせません

13
Timothy Green

ビューモデルでエディターテンプレートとデータ注釈を使用して、ビューをよりクリーンにするフォーマットを指定します。

[DataType(DataType.Date)]
[DisplayName("Birthday:")]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime? Birthday { get; set; }

そしてあなたのビューの内側:

<span class="datePicker">
    @Html.LabelFor(x => x.Birthday)
    @Html.EditorFor(x => x.Birthday)
</span>

次に、テキストボックスにdatePickerクラスがなくなるため、セレクターを調整します。

$('.datePicker :text').datepicker({ 
    showOn: 'both', 
    buttonImage: "/content/images/calendar-red.gif" 
});
16
Darin Dimitrov

これに変更してみてください:

@Html.TextBox("birthday", (Model.Birthday.Value.ToShortDateString()), new { @class = "datePicker" })

DateTimeはNullableなので、DateTimeメソッドにアクセスする前に.Valueを実行する必要があります。

ToStringDateTimeを呼び出すと、日付と時刻が表示されます。したがって、ToStringを呼び出す代わりに、 ToString with formating またはToShortDateStringのいずれかを使用します。

MSDNには、 ToShortDateString について次のように書かれています。

ToShortDateStringメソッドによって返される文字列は、カルチャに依存します。これは、現在のカルチャのDateTimeFormatInfoオブジェクトによって定義されたパターンを反映しています。たとえば、米国以外の文化の場合、標準の短い日付パターンは「M/d/yyyy」です。 de-DEカルチャの場合、「dd.MM.yyyy」です。 ja-JPカルチャの場合、「yyyy/M/d」です。特定のコンピューターの特定のフォーマット文字列は、標準の短い日付フォーマット文字列とは異なるようにカスタマイズすることもできます。

2
Filip Ekberg

私は実際にMVC3を使用してRazorでこの問題に遭遇していました。必要な属性を取得するために、Shared/EditorTemplatesでDateTime部分クラスを作成する必要がありました。
以前の私の見解は@Html.TextBoxWithAttributesFor(m => m.To, new { @class = "text-box", @readonly = "readonly" })でしたが、これは私にTimeStampを与え続けました。 .Value.DateTimeまたはその他の回避策を試した場合でも。しかし、私の現在の実用的な解決策は次のとおりです。

見る:

@Html.EditorFor(m => m.To)

部分クラス:

@model System.DateTime
@Html.TextBox("", (Model.ToShortDateString()), new { @class = "text-box", @readonly = "readonly" })

このページを2番目のソースとして使用しました: http://buildstarted.com/2010/09/10/overriding-displayfor-and-editorfor-to-create-custom-outputs-for-mvc/

1
user864675

「Model.Birthday.ToString()」がある場合は、「Model.Birthday.ToShortDateString()」に置き換える必要があります。

0
Manicguitarist