在 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 或其他日期选择器。
<input asp-for="Birthdate" type="datetime" data-name="date-picker" class="form-control" autocomplete="off">
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 将数据库更改保存到拖放列表