我正在使用jquery函数调用一个页面方法,它有点像这样:
function GetNewDate(thedateitem) {
ThisMonth = 3;
TheDay = 1;
TheYear = 2011;
DateString = TheMonth + '/' + TheDay + '/' + TheYear;
$.ajax({
type: "POST",
url: "/Pages/CallHistory.aspx/ResetDate",
contentType: "application/json; charset=utf-8",
data: DateString,
dataType: "json",
success: successFn,
error: errorFn
})
};
然后,在代码隐藏文件中,我有:
[WebMethod]
public static void ResetDate(DateTime TheNewDate)
{
var test = 4;
}
然而,当我在var test = 4上设置一个断点时,它永远不会停在那里。
我错过了什么?
感谢。
答案 0 :(得分:3)
你需要确切地检查你的jQuery调用发生了什么 - 我建议使用firebug(或你选择的浏览器中的等价物)来跟踪javascript并查看响应/请求。
这将允许您查看从网页/方法返回的任何错误。
更新
如果您使用dataType: "json"
,则应该发送正确的JSON。
答案 1 :(得分:2)
您需要在data
调用中正确编码ajax
,并引用参数名称。您将要使用带有参数名称的JSON字符串作为属性,以便Asp.NET页面方法可以正确理解数据。 E.g:
data: "{'TheNewDate':'" + DateString +"'}",
Matthew在评论中提出了一个很好的观点 - 你需要正确地序列化你的日期,以便.Net正确理解它(所有其他原语工作正常,日期缺少JS中的文字表达格式,因此存在问题)。我发现a good example on the SCHOTIME.NET blog有一个方便的小函数来将JS Date
对象序列化为MS兼容的JSON字符串
Date.prototype.toMSJSON = function () {
var date = '"\\\/Date(' + this.getTime() + ')\\\/"';
return date;
};
您的完整ajax
电话将如下所示:
dateValue = new Date(TheYear, TheMonth , TheDay );
$.ajax({
type: "POST",
url: "/Pages/CallHistory.aspx/ResetDate",
contentType: "application/json; charset=utf-8",
data: "{'TheNewDate':" + dateValue.toMSJSON +"}", //<-- the modification
dataType: "json",
success: successFn,
error: errorFn
})