我的日期似乎没有以表单的形式发布到控制器
本文关键字:控制器 表单 日期 我的 | 更新日期: 2023-09-27 18:33:32
我的模型有一个具有日期属性的对象...
[Required(ErrorMessage="{0} is required")]
[Display(Name="Donation date")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime DonationDate { get; set; }
该视图有一个编辑器。
<div class="editor-label">
@Html.LabelFor(model => model.Donation.DonationDate)
</div>
<div class="editor-field">
@Html.TextBox("txtDate", Model.Donation.DonationDate.ToString("dd/MM/yyyy"), new { @class = "date" })
@Html.ValidationMessageFor(model => model.Donation.DonationDate)
</div>
控制器只是收到模型的回馈...但是当我在控制器中执行此操作并将其提供给另一个视图时......
ViewBag.Date = model.Donation.DonationDate;
每次我刚回来1/1/0001 12:00:00 AM 无论日期设置在什么位置。有什么想法吗?谢谢!
忘了提...我还在编辑器字段上使用 JQuery 日期选择器:
$('.date').attr("placeholder", "dd/mm/yy").datepicker({
dateFormat: "dd/mm/yy",
changeMonth: true,
changeYear: true
});
您可以使用 TextBoxFor ,以便视图引擎知道如何正确标记表单字段(以便模型绑定器在回发时识别它):
@Html.TextBoxFor(model => model.Donation.DonationDate, new { @class = "date" })
或者,您可以手动正确命名文本框。 我不确定那会是什么样子...
更新
好的,我很好奇,所以我检查了一下。 嵌套字段的命名约定使用点表示法。 所以你应该能够写这个:
@Html.TextBox("Donation.DonationDate", Model.Donation.DonationDate.ToString("dd/MM/yyyy"), new { @class = "date" })
更新 #2
若要正确设置格式,请将属性应用于模型中的 DonationDate 属性:
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode=true)]
为此,您还必须使用 @Html.EditorFor 而不是 TextBoxFor。