无法正确设置发送到控制器的Kendo Grid日期列的格式

时间:2017-01-22 22:13:51

标签: model-view-controller kendo-grid

我在这里看到了同样的问题:Set the format of a Kendo DateTimePicker date sent to the controller 然而,给出的答案并没有解决我的问题。

简单地说:我有一个带有这样一栏的Kendo网格:

import com.google.android.gms.location.places.*;

对于字段TransactionTime,我有一个像这样定义的列:

model: {
  id: "Id",
  fields: {
    Id: {editable: false, type: "number"},
    TransactionAmount: {type: "number"},
    TransactionTime: {type: "date"}
  }

字段编辑器是DateTimePicker:

{
  field: "TransactionTime",
  editor: transactionTimeColumnEditor,
  format: "{0:u}"
}

网格数据源传输定义如下:

function transactionTimeColumnEditor(container, options) {
  $('<input name="' + options.field + '" />')
    .appendTo(container)
    .kendoDateTimePicker({
      format: "dd.MM.yyyy HH:mm",
      timeFormat: "HH:mm"
    });
}
到目前为止,控制器什么也没做:

到目前为止,我的控制器什么也没做:

create: {
  url : "@Html.Raw(Url.Action("AddDeposit", "AdminDeposit"))",
  type: "POST",
  dataType: "json",
  data: addAntiForgeryToken
},
parameterMap: function(data, operation) {
  if (operation === "update" || operation === "create") {
    data.TransactionTime = kendo.toString(kendo.parseDate(data.TransactionTime, "G"));
  }
  return data;
}

在控制器中,我看到没有填充TransactionTime值。当我检查原始HTTP POST参数时,我看到这样的字符串:

    [HttpPost]
    public ActionResult AddDeposit(DepositTransactionModel model)
    {
        if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders))
            return AccessDeniedView();


        return new NullJsonResult();
    }

如您所见,我尝试将表单数据的TransactionTime属性转换为标准格式。但它没有帮助。在parameterMap函数data.TransactionTime里面看起来像这样:

Sun+Jan+22+2017+22:52:39+GMT+0100+(Central+Europe+Standard+Time)

但HTTP POST参数仍然如上所示。

我也尝试设置剑道文化:

Date 2017-01-22T22:03:31.708Z

结果仍然相同。

我读到了另一个选项 - 将传输设置为函数并将手动生成的JSON发送到服务器。但是我想避免客户端的额外复杂性。

我是否错过了重要的事情?

1 个答案:

答案 0 :(得分:0)

所以,我找到了解决方案。不确定它为什么会起作用但确实如此。 我已经实现了TransactionTime被转换为UTC字符串的数据源传输的parameterMap函数:

parameterMap: function(data, operation) {
  if (operation === "update" || operation === "create") {
    data.TransactionTime = data.TransactionTime.toUTCString();
  }
  return data;
}

就是这样