我有以下字段:
@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()这次不能救我)
我尝试过来自here和here的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),然后您可以将值发送回控制器
答案 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();
。