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 的值。

日期选择器返回具有 dd/mm/yy 格式的值。(.ToShortDateString() 这次救不了我了)

我已经从这里这里尝试了 Darin Dimitrov 的答案,但除非我是一个彻头彻尾的白痴,否则这些对我来说并不适用。


稍后编辑:
我已经设法找到了解决方案,并希望从现在起与任何需要它的人分享。

 @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
        });

将您获得的值存储到隐藏字段中(通过 Jquery 通过隐藏字段“shortDate”的 id),因此您可以将值发送回控制器

4

1 回答 1

1

我已经从这里和这里尝试了 Darin Dimitrov 的答案,但除非我是一个彻头彻尾的白痴,否则这些对我来说并不适用。

那是因为您忘记添加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)

另一种可能性是为日期选择器编写自定义编辑器模板:

[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 回答