我在这里看到了同样的问题: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发送到服务器。但是我想避免客户端的额外复杂性。
我是否错过了重要的事情?
答案 0 :(得分:0)
所以,我找到了解决方案。不确定它为什么会起作用但确实如此。 我已经实现了TransactionTime被转换为UTC字符串的数据源传输的parameterMap函数:
parameterMap: function(data, operation) {
if (operation === "update" || operation === "create") {
data.TransactionTime = data.TransactionTime.toUTCString();
}
return data;
}
就是这样