【问题标题】:My date doesn't seem to be posting back in the form to the controller我的日期似乎没有以表格形式发回给控制器
【发布时间】:2012-05-07 04:00:56
【问题描述】:

我的模型有一个具有日期属性的对象...

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

【问题讨论】:

    标签: c# asp.net-mvc-3 datetime razor controller


    【解决方案1】:

    您可以使用 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多