【问题标题】:Jquery ajax posting datejQuery ajax 发布日期
【发布时间】:2013-06-24 15:10:34
【问题描述】:

我很困惑为什么我的控制器没有从 jquery datepicker 接收 startDate 参数

我的想法是它与格式有关。

在这种情况下,我不能强制使用表单发布模型。

参数将作为 null 进入操作。

    $.ajax({
        url: '@Url.Action("myAction")',
        type: 'GET',
        cache: false,
        data: { startDate: $('#startDate').val(), endDate: $('#endDate').val() },
        success: function (result) {
            $('#updateDiv').html(result);
        }
    });

控制器

    public ActionResult myAction(DateTime? startDate, DateTime? endDate)

我也试过了;

    startDate: $.datepicker.formatDate('dd/mm/yy', new Date())

【问题讨论】:

  • 如果我输入alert($('#endDate').val());,它会以dd/mm/yy 格式显示今天的日期
  • 这是格式问题,很难直接把一个DateTime传给服务器,最好用字符串接收,然后解析成datetime。
  • 尝试在浏览器的开发者工具中跟踪您的 ajax 请求。在 Data 中查看日期是否真的被发送到客户端。
  • 我试过了,但是作为一个 post 方法,它似乎被隐藏了。 musefan 和 @carlosB 解决方案是一个简单的解决方法。
  • 问题是,.net 期望的确切格式字符串取决于服务器正在使用的区域设置,其中一种可能是“dd/MM/yyyy:Thh:mm :ss”。检查这一点的一种方法是跟踪 json 中收到的日期时间。

标签: jquery ajax asp.net-mvc asp.net-mvc-4 jquery-ui-datepicker


【解决方案1】:

是的,这可能是格式问题 - 我忘记了确切原因。

我建议将控制器操作参数更改为 string 类型,然后您可以以正确的格式手动解析它们,这是我一直这样做的方式,自从使用此方法后从未出现任何问题。

类似这样的:

public ActionResult myAction(string startDate, string endDate)
{
    DateTime? startDT = null;
    if(!string.IsNullOrWhitespace(startDate))
    {
        startDT = DateTime.ParseExact(startDate, "dd/MM/yyyy", null);
    }
}

改用TryParseExact 可能会更好,这取决于您真正想要如何处理不良数据

【讨论】:

  • 您是否只是将 mm 更改为 MM :^) 这似乎有效.. :)!至少半天的工作变成了有用的东西。奇怪的是,我不需要更改基于模型的表单,在发布日期时间时使用相同的操作。它似乎将其识别为字符串,并且也可以正确解析。谢谢
  • @Doomsknight:我从一开始就输入了MM。 .Net 日期格式和 java 脚本数据格式的语法不同,因此您不能使用相同的语法。我建议将两者都放入配置类(或 web.config)中并在代码中引用它们。以防您需要快速更改格式
  • 最好使用 tryParseExact 接收到的数据可能无效:),并且该符号上的“mm”用于几分钟而不是几个月(只是为了澄清)。
  • @CarlosB:确实,我自己可能会使用TryParseExact,但 OP 可以选择最适合他的需求。他可能更喜欢抛出异常,也可能不喜欢;)
  • @musefan:确实你是对的 :) 这一切都取决于风吹的方式:P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 2016-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-13
相关资源
最近更新 更多