重新加载jqGrid时,如何在PostData中传递DateTime信息?

3
考虑在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");

以下是控制器的ActionMethod,请求到达的地方...
public ActionResult GetXyz(int xyzId, DateTime? date)

保持日期为可空是必须的,因为它是可选选择。
问题:在.NET Framework的Culture设置中,日期格式为“DD/MM/YYYY”。我们发送“02/10/2016”时,它会被接受为“2016年2月10日”(这是错误的),但当我们发送“16/10/2016”时,它会读取为空。这仅在传递jqGrid Reload操作中的日期时发生。而在正常的ajax调用中,一切正常,例如“02/10/2016” =>“2016年10月2日”,和“16/10/2016” =>“2016年10月16日”。
有人可以帮忙吗?

你尝试过以ISO格式“2016-02-10”(2016年2月10日)发送日期吗?你使用的是哪个版本的Newtonsoft.Json - Oleg
@Oleg。我在寻找你的资料,并在此处提及。非常感谢你的回复。我们正在传递用户从日历中选择的值(DD/MM/YYYY),我们没有将其转换为任何其他格式。我们需要进行转换吗? - Zeshan Munir
1
建议使用仅与语言环境无关的格式来传输数据。这是数字、日期等常见规则。在将 $("#date").val() 转换为 YYYY-MM-DD 格式并分配给 postData.xyzId 之前,您是否尝试过?我认为 MVC 5 中使用的 Newtonsoft.Json 的默认 ISO 日期格式。 - Oleg
再次感谢你,@Oleg。这似乎是有效的。测试后我会告诉你。谢谢。赞! - Zeshan Munir
@Oleg,你能把它发布为答案吗?这样我就可以将其标记为答案了。 - Zeshan Munir
2个回答

3
建议使用仅限于当地格式的数据来传输数据。对于数字、日期等,这是一种常规规则。在将 $("#date").val() 转换为格式为 YYYY-MM-DD 的日期格式(ISO 8601)之后,再分配给 postData.xyzId 吗?我认为,ISO日期格式是MVC中使用的 Newtonsoft.Json 的默认格式。
通常,人们使用带有可选的 formatoptionsnewformat 属性的 formatter:"date"。通过这种方式,您可以仅保留本地环境无关的数据并进行传输,但用户将看到基于 formatoptions.newformat 的本地特定日期格式(该值在 colModel 中明确指定或继承自 grid.locale-XX.js)。

我现在正在做这个。而且它正常工作。postData["date"] = Converter.dateTimeStringToUtcDateTime($("#date").val()).toJSON() - Zeshan Munir
在我的转换器模块中(使用揭示模块化模式),var dateTimeStringToUtcDateTime = function(value, sourceFormat) { return moment(value, sourceFormat || Common.dateTimeFormat.shortDatePattern).utc(); }; - Zeshan Munir

2
捕获日期作为字符串
public ActionResult GetXyz(int xyzId, string date="")

然后以传统方式进行格式化:

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

希望这能帮到您:)

谢谢你的回复。但是,我不想将日期作为字符串接收,然后再将其解析为日期。框架应该有一些内置的实现来完成这个任务。 - Zeshan Munir
我认为你需要解决方案。 - Mahbubur Rahman
是的,感谢您的时间。但我认为Oleg的解决方案更符合我的想法。 - Zeshan Munir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接