2011-01-07 40 views
11

Tôi có một WebMethod với tham số được định nghĩa là DateTime. Khi tôi gọi đó làCách chuyển giá trị DateTime sang một WebMethod (ASMX)

webservice, tôi nhận được lỗi này:

at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject() at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth) at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth) at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth) at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer) at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit) at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input) at System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer) at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context) at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)"

Đây là WebService tôi:

/// <summary> 
/// Summary description for AgendamentoService 
/// </summary> 
[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.Web.Script.Services.ScriptService] 
public class AgendamentoService : System.Web.Services.WebService 
{ 

    public AgendamentoService() 
    { 

     //Uncomment the following line if using designed components 
     //InitializeComponent(); 
    } 

    [WebMethod] 
    public CompromissoWekCalendarVO[] GetCompromissos(int id_pessoa, DateTime start, DateTime end) 
    { 
     bo.CompromissoBO compBO = new bo.CompromissoBO(); 
     return compBO.Get(id_pessoa,start, end).ToArray(); 
    } 

} 

Và đây, khách hàng mã phía tôi:

var params = '{id_pessoa: "' + id_pessoa + '", start:/Date('+ start.getTime()+')/, end:/Date(' + end.getTime()+')/}'; 
        $.ajax( 
         { 
          type: "POST", 
          dataType: "json", 
          contentType: "application/json; charset=utf-8", 
          url: '<%= this.ResolveClientUrl("~/services/misc/AgendamentoService.asmx/GetCompromissos") %>', 
          data: params, 
          success: function (json) { 

           if ($.isArray(json.d)) { 
            $.each(json.d, function(key, value) { 
            value.start = getJsonDate(value.start); 
            value.end = getJsonDate(value.end); 
            }); 
           } 

           callback(json.d);         

          } 
         }); 

đâu 'bắt đầu' và 'kết thúc' thời gian là hai đối tượng 'Ngày' javascript.

Trả lời

9

Thats vì có định dạng dây ngày/giờ cụ thể mà ASP.NET Ajax mong đợi - dạng của nó là "\/Date(x)\/", trong đó x là số ms đã trôi qua kể từ ngày 1 tháng 1 năm 1970 lúc nửa đêm UTC. Vì vậy, về cơ bản, bạn cần sử dụng một số chức năng trợ giúp để chuyển đổi ngày JS của bạn sang định dạng cần thiết trong khi gọi dịch vụ (và ngược lại, ngày/giờ json từ dịch vụ đến đối tượng ngày/giờ JS).

Vì vậy, bạn phải thay đổi đoạn mã như

`'", start:/Date('+ start.getTime()+')/, end...` 

để

'", start:"\\\/Date(' + this.getTime() + ')\\\/", end...' 

cách nhanh nhất sử dụng bên dưới plug-in:

http://schotime.net/blog/index.php/2008/07/01/jquery-plugin-for-aspnet-ajax-jmsajax/

Bạn có thể tìm thấy thêm thông tin trong các bài viết dưới đây:

http://www.overset.com/2008/07/18/simple-jquery-json-aspnet-webservice-datetime-support/

http://schotime.net/blog/index.php/2008/06/19/jquery-ajax-aspnet-and-dates/

http://msmvps.com/blogs/luisabreu/archive/2009/08/19/jquery-full-control-with-the-ajax-function.aspx

+0

VinayC, cảm ơn bạn! Tôi không biết về jMsAjax. – Cleiton

+0

Plugin jMsAjax dường như không hoạt động với phiên bản mới nhất của jQuery (1.6.2). – Gan

+0

@Gan, bạn có thể báo cáo vấn đề/lỗi của bạn với tác giả như bình luận cho mục blog của mình (liên kết trong câu trả lời). – VinayC

1

này đã làm việc cho tôi:

JSON.stringify(new Date()) 

này chuyển đổi nó sang một định dạng như "2014-06-04T14: 26: 27.129Z", dịch vụ web của tôi rất vui khi chấp nhận tham số DateTime.

Các vấn đề liên quan