如何使用ToShortDateString和DatePicker更改DateTime格式

时间:2012-06-26 09:45:41

标签: asp.net-mvc-3 razor

我有以下字段:

@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()这次不能救我)

我尝试过来自herehere的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),然后您可以将值发送回控制器

1 个答案:

答案 0 :(得分: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)

请注意,如果您有多个DateTime字段,我已应用datepicker类而不是使用id来避免冲突。您需要相应地调整选择器:$('.datepicker').datepicker();而不是您当前使用的$('#datepicker').datepicker();