0

私は次のフィールドを持っています:

@Html.TextBoxFor(model => model.Patient.dateOfBirth, new { id = "datepicker", @class = "double text white" })

これは、次のメタデータ定義を持つDateTimeフィールドです。

 [Required(ErrorMessage = "Date Of Birth is required")]
 [DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")]
 public DateTime dateOfBirth;

問題は、DOBをd / m / yとして表示するために必要ですが、日時の原因として、DateTimeのままにする値を必要とするdatepickerを使用していることです。

日付ピッカーは、dd / mm/yy形式の値を返します。(.ToShortDateString()は今回私を救うことができません)

私はここここからDarinDimitrovAnswersを試しましたが、私が完全なバカでない限り、それらは私にとって実際には機能しません。


後で編集:
私はこれに対する解決策を見つけることができ、これからそれを必要とする人と共有したいと思いました。

 @Html.HiddenFor(model => model.DOBirth, new { id = "shortDate", @class = "double text white" })

 @Html.TextBox(" ", Model != null ? Model.dateOfBirth.Value.ToShortDateString() : string.Empty, new { id = "datepicker", @class = "double text white" })

そして、次のJqueryを使用します。

 $('#datepicker').datepicker({
            changeMonth: true,
            changeYear: true,
            inline: true,
            onSelect: function (dateText, inst) { CalculateAge(dateText); } //an extra method
        });

隠しフィールドに取得した値を(隠しフィールド "shortDate"のIDを介してJquery経由で)保存します。これにより、値をコントローラーに送り返すことができます。

4

1 に答える 1

1

私はこことここからDarinDimitrovAnswersを試しましたが、私が完全なバカでない限り、それらは私にとって実際には機能しません。

ApplyFormatInEditMode = trueこれは、[DisplayFormat]属性を追加するのを忘れたためです。

[Required(ErrorMessage = "Date Of Birth is required")]
[DisplayFormat(DataFormatString = "{0:dd MMM yyyy}", ApplyFormatInEditMode = true)]
public DateTime dateOfBirth;

その後:

@Html.EditorFor(model => model.Patient.dateOfBirth)

もう1つの可能性は、日付ピッカー用のカスタムエディターテンプレートを作成することです。

[Required(ErrorMessage = "Date Of Birth is required")]
[DisplayFormat(DataFormatString = "{0:dd MMM yyyy}", ApplyFormatInEditMode = true)]
[UIHint("DatePicker")]
public DateTime dateOfBirth;

と内部~/Views/Shared/EditorTemplates/DatePicker.cshtml

@Html.TextBox(
    "", 
    ViewData.TemplateInfo.FormattedModelValue, 
    new { @class = "double text white datepicker" }
)

とあなたのビューの内側:

@Html.EditorFor(model => model.Patient.dateOfBirth)

datepicker複数のDateTimeフィールドがある場合は、IDを使用する代わりにクラスを適用して、競合を回避していることに注意してください。それに応じてセレクターを調整する必要があります。現在使用しているセレクター$('.datepicker').datepicker();の代わりに。$('#datepicker').datepicker();

于 2012-06-26T09:49:09.743 に答える