【问题标题】:DateTime in jqGrid PostData while RelaodGrid OperationRelaodGrid操作时jqGrid PostData中的日期时间
【发布时间】:2016-05-03 08:07:40
【问题描述】:

考虑 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”时,它接受为“2016 年 2 月 10 日”(顺便说一句,这是错误的)但是当我们发送“16 /10/2016" 它将其读取为空。只有当我们在 jqGrid 重新加载操作中传递日期时才会发生这种情况。而在正常的 ajax 调用中,一切都运行良好 例如"02/10/2016" => "2016 年 10 月 2 日", 和“16/10/2016”=>“2016 年 10 月 16 日”。

谁能帮忙?

【问题讨论】:

  • 您是否尝试以 ISO 格式“2016-02-10”(2016 年 2 月 10 日)发送日期?您使用哪个版本的Newtonsoft.Json
  • @Oleg。我在这里找到要提及的您的个人资料。感谢一百万的回复。好吧,我们在用户从日历中选择时传递值(DD/MM/YYYY),我们没有将其转换为任何其他格式。我们需要转换吗?
  • 建议仅使用与语言环境无关的格式来传输数据。这是数字、日期的通用规则......您是否尝试在分配给postData.xyzId 之前将$("#date").val() 转换为YYYY-MM-DD 格式?我认为 ISO 日期格式是 MVC 5 中使用的 Newtonsoft.Json 的默认格式。
  • 再一次,你摇滚@Oleg。这似乎奏效了。测试后我会告诉你的。谢谢。竖起大拇指!
  • @Oleg,您可以将其发布到答案中,以便我将其标记为答案。

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


【解决方案1】:

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

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

【讨论】:

  • 我现在正在这样做。它工作正常。 postData["date"] = Converter.dateTimeStringToUtcDateTime($("#date").val()).toJSON()
  • 并且,在我的转换器模块(使用显示模块化模式)中,var dateTimeStringToUtcDateTime = function(value, sourceFormat) { return moment(value, sourceFormat || Common.dateTimeFormat.shortDatePattern).utc(); };
【解决方案2】:

获取日期为字符串

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

然后以常规方式格式化:

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

希望这会有所帮助:)

【讨论】:

  • 感谢您的回复。但我不想将日期作为字符串接收,然后将其解析为日期。框架应该有一些内置的实现。
  • 我认为您需要解决方案。
  • 好的,感谢您的宝贵时间。但是,我认为 Oleg 的解决方案对我来说更有意义。
猜你喜欢
  • 1970-01-01
  • 2012-05-14
  • 2010-11-24
  • 2013-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 2011-05-03
相关资源
最近更新 更多