页面方法不起作用

时间:2011-02-09 21:21:12

标签: jquery asp.net

我正在使用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上设置一个断点时,它永远不会停在那里。

我错过了什么?

感谢。

2 个答案:

答案 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
 })