【发布时间】:2016-10-11 05:00:48
【问题描述】:
我有一个使用 Kendo 控件的表单,当用户单击按钮时,收集这些控件值的 AJAX 请求将发送到服务器并根据这些条件下载文件。其中一个控件是 DateTimePicker。
$.ajax({
type: 'POST',
contentType: "application/json; charset=utf-8",
url: '@Url.Action("MyGenerateReportMethod")',
async: true,
data: getViewModel(),
...
});
function getViewModel() {
...
viewModel.DateFrom = $("#DateRangeFrom").data("kendoDatePicker").value();
...
return JSON.stringify({ para: viewModel });
}
public ActionResult MyGenerateReportMethod(MyModel para)
{
try{
...
}
}
public class MyModel
{
public DateTime? DateFrom { get; set; }
}
上面的简化代码演示了我的情况。
我有一个对服务器的 POST ajax 请求,它传递一个包含 Kendo DateTimePicker 值的序列化 JSON 对象。
服务器端操作尝试将此 JSON 对象作为参数捕获并执行与此问题无关的事情。
我的问题是,出于某种原因,我必须将请求从 POST 更改为 GET。 虽然它使用 POST 方法工作,但如果我将“POST”更改为“GET”,它就不起作用。
我检查了在 Chrome 的开发者工具中发送的请求,它确实以以下格式发送了 JSON 对象:(在“网络”选项卡的“查询字符串参数”部分)
{"para": {
...
"DateFrom":"2016-04-13T16:00:00.000Z"
...
}
}
但是,在服务器端,MyModel para 似乎没有成功捕获此对象(如果我从“POST”更改为“GET”)。 所有DateTime字段都变为null时,其他字段仍然可以绑定。
为什么会发生这种情况,如何将请求从“POST”更改为“GET”? 谢谢。
已编辑
根据一些cmets/answers,我尝试将AJAX请求修改为以下代码,但还是不行...(行为相同)
$.ajax({
type: 'GET',
url: '@Url.Action("SumbitOutstandingReportList")',
data: getPlanViewModel(),
async: true,
...
}
function getPlanViewModel(){
var obj = {};
...
obj.DateFrom = $("#DateRangeFrom").data("kendoDatePicker").value();
...
return { para: obj };
}
【问题讨论】:
-
删除
contentType选项并且不对数据进行字符串化(GET 请求中没有正文) - 只需使用data: { DateFrom: $("#DateRangeFrom").data("kendoDatePicker").value() }, -
感谢您的回答,我试过了,但还是不行……
-
对我来说非常好。
-
@StephenMuecke 我已经在 OP 中更新了我的代码,你能看到我错过了什么吗?
-
它只是你的
getPlanViewModel()函数中的return obj;(不是return { para: obj };)
标签: javascript jquery asp.net-mvc kendo-ui