【问题标题】:on passing 2 datetime values using json.stringify to controller with ajax call first one is passed in datetime format but second one becomes null在使用 json.stringify 将 2 个日期时间值传递给控制器​​时,使用 ajax 调用第一个以日期时间格式传递,但第二个变为 null
【发布时间】:2017-02-18 05:40:00
【问题描述】:

我正在尝试通过对 mvc 控制器 jsonresult 类型操作方法的 ajax 调用使用 json.stringify() 方法传递多个参数,包括 2 个日期时间类型参数。 所有参数值均已成功传递。从 2 个日期时间类型参数中,第一个值传递成功,但第二个参数值变为空!

下面是我的代码。

javascript代码:

    var MobileNumber = $('#MobileNumber').val() == "" ? 0 : $("#MobileNumber").val();
    var FromDate = $('#FromDate').val() == "" ? 0 : $("#FromDate").val();
    var FromTime = $('#FromTime').val() == "" ? 0 : $("#FromTime").val();
    var ToDate = $('#ToDate').val() == "" ? 0 : $("#ToDate").val();
    var ToTime = $('#ToTime').val() == "" ? 0 : $("#ToTime").val();

$.ajax({
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        type: "POST",
        url: '@Url.Content("~/Merchant/GetRejectedMerchantTransactions")',
        data: JSON.stringify({ mobileNumber: MobileNumber, fromDate: FromDate, fromTime: FromTime, toDate: ToDate, toTime: ToTime }),
        success: function (data) {
        $('#statusBox').removeClass('alert-danger').addClass('alert-success').show(500, function () {
                                        $('#statusMessage').html(data.Message);
                                    });
                                }
        }
    });

控制器代码如下:

[HttpPost]
[Authorize]
public JsonResult GetRejectedMerchantTransactions(string mobileNumber, DateTime? fromDate, string fromTime, DateTime? toDate, string toTime)
{
     List<MerchantTransactions> lstMerchantTransactions = new List<MerchantTransactions>();
        try
        {
            string  shortFromDate = "";
            string  shortToDate = "";
            string fromFinalDate = "";
            string toFinalDate = "";

            if (fromDate.HasValue && fromTime.Length > 1)
            {
                shortFromDate = fromDate.Value.ToShortDateString();
                fromFinalDate = shortFromDate + " " + fromTime;
            }

            if (toDate.HasValue && toTime.Length > 1)
            {
                shortToDate = toDate.Value.ToShortDateString();
                toFinalDate = shortToDate + " " + toTime;
            }

            List<TransactionStatus> lstTransactionStatus = GetTransactions();
            TransService.TransServiceClient transServiceClient = new TransService.TransServiceClient();
            TransService.GetTransactionsRequest getTransactionsRequest = new TransactionService.GetTransactionsRequest
            {
                MobileNumber = Convert.ToDecimal(mobileNumber),
                FromDate = string.IsNullOrEmpty(fromFinalDate) ? fromDate : Convert.ToDateTime(fromFinalDate),
                ToDate = string.IsNullOrEmpty(toFinalDate) ? toDate : Convert.ToDateTime(toFinalDate)
            };
}

我也尝试过更改参数名称,但结果相同。

【问题讨论】:

  • 价值观是什么,如果你的服务器上的文化怎么办? (如果它们是null0 无法转换为DateTime),您将通过将值设置为0 来尝试做什么
  • @StephenMuecke 请检查所问问题中的控制器操作代码。我已经更新了它供您参考。
  • 您的控制器代码与它无关。你说过fromDate 的值可以通过,但toDate 的值不是。所以它在您看来是问题的代码(我们不知道var ToDate = $('#ToDate').val() == "" ? 0 : $("#ToDate").val(); 返回什么,或者如果文本框为空(这根本没有意义),为什么在世界上将其转换为0

标签: jquery ajax asp.net-mvc-4 datetime


【解决方案1】:

我已通过为我的 .cshtml 文件中的所有日期时间类型值应用新的 Date() javascript 函数来解决此问题。

喜欢

var FromDate = $('#FromDate').val() == "" ? 0 : 新日期($("#FromDate").val()); var FromTime = $('#FromTime').val() == "" ? 0 : 新日期($("#FromTime").val());

【讨论】:

    猜你喜欢
    • 2011-10-02
    • 1970-01-01
    • 2016-11-03
    • 2021-09-08
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多