【问题标题】:Why only one date is transferred from view to controller?为什么只有一个日期从视图传输到控制器?
【发布时间】:2019-04-06 12:44:13
【问题描述】:

我有一个用于创建账单的简单表格。我在这个表单上有两个日期字段。

[DataType(DataType.Date)]
public DateTime FromDate { get; set; }
[DataType(DataType.Date)]
public DateTime ToDate { get; set; }

在视图中我有两个字段(日期选择器):

<div class="form-group">
    <label class="col-sm-2 control-label">From date:</label>
    <div class="col-sm-6">
        @Html.TextBoxFor(m => m.FromDate, new { @class = "form-control date-pickerFrom", placeholder = "Enter Drop-off date here..." })
    </div>
</div>

<div class="form-group">
    <label class="col-sm-2 control-label">To date:</label>
    <div class="col-sm-6">
        @Html.TextBoxFor(m => m.ToDate, new { @class = "form-control date-pickerTo", placeholder = "Enter Drop-off date here..." })
    </div>
</div>

在视图的最后,我有两个日期选择器的 JavaScript 函数:

$(function () {
    $('.date-pickerFrom').datepicker({
        dateFormat: "dd/mm/yy"
    });
    $('.date-pickerTo').datepicker({
        dateFormat: "dd/mm/yy"
    });
});

当我确认我的表单时,我只能在控制器中为“起始日期”字段获得正确的日期值。 “迄今为止”值始终为 01/01/0001。知道我做错了什么吗?

谢谢你,祝你有美好的一天!

【问题讨论】:

  • 您如何接收这些字段?似乎您有空的 ToDate 字段(可能您是从 DB 获取它并且它在那里为空)。
  • 如何通过表单提交或 ajax 调用将这些日期发布到控制器。能否请您出示该代码?

标签: javascript c# asp.net-mvc datetimepicker


【解决方案1】:

将您的视图更改为:

<div class="form-group">
    <label class="col-sm-2 control-label">From date:</label>
    <div class="col-sm-6">
         @Html.EditorFor(m => m.FromDate, new { htmlAttributes = new { @id = "datepickerFrom", @class = "form-control", @placeholder = "Enter Drop-off date here..."}})
    </div>
</div>

<div class="form-group">
    <label class="col-sm-2 control-label">To date:</label>
    <div class="col-sm-6">
         @Html.EditorFor(m => m.ToDate, new { htmlAttributes = new { @id = "datepickerTo", @class = "form-control", @placeholder = "Enter Drop-off date here..."}})
    </div>
</div>

并在你的 JavaScript 中调用它们:

        $(document).ready(function () {
            $('#datepickerFrom').datepicker({
               dateFormat: "dd/mm/yy"
            });

            $('#datepickerTo').datepicker({
               dateFormat: "dd/mm/yy"
           });
       });

为每个日期选择器分配一个id,它应该适合你。

【讨论】:

  • 您的控制台中存在 JavaScript 错误。同一页面上的多个日期选择器会发生这种情况。上面的答案应该可以解决您的问题。如果是,标记为答案
  • 编辑那个实体(账单)怎么样?我尝试使用 var $datepicker = $('#datepickerFrom'); $datepicker.datepicker(); $datepicker.datepicker("setDate", "@Model.FromDate.ToShortDateString()");$('#datepickerFrom').datepicker("setDate", "10/12/2012"); 但对我不起作用...
  • @vkel 尝试在 Jquery 中设置 Model 值,如下所示:@Html.Raw(Json.Encode(@Model.FromDate.ToShortDateString())); 或者您可以在 @Html 辅助语法中设置默认值。
  • 所以你的意思是这样的:@Html.EditorFor(m =&gt; m.FromDate,... … , @value = @Html.Raw(Json.Encode(@Model.FromDate.ToShortDateString())) } })?我已经尝试过了,但没有帮助。在 html 中,该值是可以的(value="4/1/2019")。但我得到错误: $(...).datepicker 不是函数。我检查了一下,我只包含一个 yquery..
  • @vkel 不,如果您想在 JQuery 中设置从控制器获得的内容,请使用我在评论中提到的内容。对于你的情况,如果你想为你的日期设置一个默认值,你可以这样设置:@Html.EditorFor(m =&gt; m.ToDate, new { htmlAttributes = new { @id = "datepickerTo", @class = "form-control", @Value = @DateTime.Now.ToShortDateString(),@placeholder = "Enter Drop-off date here..."}})。这将使用当前日期为您的文本框设置默认值。
猜你喜欢
  • 1970-01-01
  • 2015-02-22
  • 2022-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多