在 ASP.NET MVC5 中传递给控制器​​时,DateTime 字段为空

Posted

技术标签:

【中文标题】在 ASP.NET MVC5 中传递给控制器​​时,DateTime 字段为空【英文标题】:DateTime field is null when passing to controller in ASP.NET MVC5 【发布时间】:2019-12-28 03:10:16 【问题描述】:

我的应用程序中有一个使用AjaxBeginForm 的搜索表单。同样,我有一个日期字段 (DateTime),我在其中使用 datePicker 引导程序。

我的表单如下所示:

@using (Ajax.BeginForm("Index", "Pedido", new AjaxOptions  HttpMethod = "Get", InsertionMode = InsertionMode.Replace, UpdateTargetId = "divPedidos" , new  @class = "form-inline" ))

    @html.TextBox("pesquisarRascunhoId", 0, new  style = "display: none" )
    <div class="row">
        <div class="col-sm-4">
            <p>Data emissão</p>
            <div class="input-group date col-sm-5">
                <span class="input-group-addon"><i class="fa fa-calendar"></i></span>
                @Html.EditorFor(model => model.PedidoFilter.EmissaoInicial, new  htmlAttributes = new  @class = "form-control input-sm datepicker"  )
            </div>
            a
            <div class="input-group date col-sm-5">
                <span class="input-group-addon"><i class="fa fa-calendar"></i></span>
                @Html.EditorFor(model => model.PedidoFilter.EmissaoFinal, new  htmlAttributes = new  @class = "form-control input-sm datepicker"  )
            </div>
        </div>
    <div class="btn-search">
        <p class="demo-button">
            <button type="submit" class="btn btn-success"><i class="fa fa-search"></i><span>Pesquisar</span></button>
        </p>
    </div>

用于在 dd / mm / yyyy 中格式化我的日期的 javascript 如下所示:

$(".datepicker").datepicker(
    format: "dd/mm/yyyy",
    language: "pt-BR",
    autoclose: true
);

我的实体如下所示:

public class PedidoFilter

   public DateTime? EmissaoInicial  get; set; 
   public DateTime? EmissaoFinal  get; set; 

最后我的控制器看起来像这样:

public ActionResult Index(PedidoResult pedidoResult, 

    var pedido = _service.FindAll(pedidoResult.PedidoFilter);

    return View(pedido);

我在我的 Web.config 中这样定义我的语言文化:

<globalization uiCulture="pt-BR" culture="pt-BR" enableClientBasedCulture="true" />

    我的表单的所有字段都到达了我的控制器,但我的日期字段始终为空,格式为 dd/mm/yyyy,我在我的 datepicker js 中定义。

    如果我以mm/dd/yyyy 格式输入日期,它将传递给我的控制器。

我的问题是:

如何以dd/mm/yyyy 格式传递我的日期字段并将它们放在我的控制器上而不使它们为空?

【问题讨论】:

MVC DateTime binding with incorrect date format的可能重复 你的视图模型是什么?这就是您在帖子中发送的内容 我的模型是 PedidoResult,其中包含一个 PedidoFilter,当我的 DateTime 被声明时。 tks [DisplayFormat(DataFormatString = "0:d", ApplyFormatInEditMode = true)]装饰DateTime字段以设置格式。我怀疑可能是因为日期格式不同。 【参考方案1】:

我认为可以使用 Culture 或通过以下代码示例更改日期格式:C# 取一年中的第一个月之后的日期。你解决这个问题。使用 flatpickr 或其他日期选择器。

&lt;input asp-for="Birthdate" type="datetime" data-name="date-picker" class="form-control" autocomplete="off"&gt;

let birthDay = flatpickr(document.getElementById('Birthdate'), 
            enableTime: true,
            dateFormat: 'd-m-Y',
        );

   $('#myform').submit((e) => 
        $('#Birthdate').val(birthDay.latestSelectedDateObj.toLocaleString());
    );

【讨论】:

以上是关于在 ASP.NET MVC5 中传递给控制器​​时,DateTime 字段为空的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Asp.Net MVC5 中使用 Ajax 将数据库更改保存到拖放列表

asp.net mvc5 如何控制没有权限的页面不显示

未验证 ASP.NET MVC5 模型

使用 Bootstrap Datepicker 选择未来日期并将其传递给 ASP.NET MVC 控制器

保存数据库控制器类 asp.net mvc5 身份中的更改

.NET开发——MVC5之数据传递应用