RelaodGrid 操作时 jqGrid PostData 中的 DateTime

DateTime in jqGrid PostData while RelaodGrid Operation

考虑 ASP.Net MVC5 项目中 JavaScript 文件中的以下虚拟代码。

var $grid = $("#grid")
var postData = $grid.jqGrid("getGridParam", "postData");
postData["xyzId"] = $("#xyzId").val();
postData["date"] = $("#date").val();
$grid.setGridParam({ postData: postData });
$grid.setGridParam({ datatype: "json", page: 1 }).trigger("reloadGrid");

下面是请求到达的Controller的ActionMethod...

public ActionResult GetXyz(int xyzId, DateTime? date)

保持日期可为空是必要的,因为它是一个可选选择。

问题: .Net Framework 文化设置中的日期格式是 "DD/MM/YYYY",当我们发送“02/10/2016”时,它接受为 "February 10, 2016"(顺便说一句,这是错误的)但是当我们发送“16/10/ 2016" 它将其读作 null。只有当我们在 jqGrid Reload 操作中传递日期时才会发生这种情况。然而,在正常的 ajax 调用中,一切都运行良好 例如"02/10/2016" => "October 02, 2016", 和“16/10/2016”=> "October 16, 2016".

有人可以帮忙吗?

将日期捕获为字符串

public ActionResult GetXyz(int xyzId, string date="")

然后按常规格式化:

var Date= DateTime.ParseExact(date, "dd/MM/yyyy", CultureInfo.InvariantCulture);

希望这会有所帮助:)

建议仅使用与区域设置无关的格式来传输数据。这是数字、日期等的通用规则...您可以将 $("#date").val() 转换为 YYYY-MM-DD 格式(ISO 8601 日期格式)before 分配给postData.xyzId?我认为 ISO 日期格式是 MVC 中使用的 Newtonsoft.Json 的默认格式。

通常使用 formatter: "date" 和可选的 formatoptions 以及 newformat 属性。以您在内部保存并仅传输与区域设置无关的数据的方式,但用户将看到本地特定日期(基于您在 colModel 中明确指定的 formatoptions.newformat 或从 grid.locale-XX.js 继承的隐式值).