如何将日期时间值传递给一个WebMethod(ASMX) [英] How to pass a DateTime value to a WebMethod (ASMX)

查看:226
本文介绍了如何将日期时间值传递给一个WebMethod(ASMX)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有定义为日期时间参数一个WebMethod。当我称之为

I have a WebMethod with a parameter defined as DateTime. When I call that

web服务,我得到这个错误:

webservice, I get this error:


  System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()
  在
  System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(的Int32
  深度)在
  System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(的Int32
  深度)在
  System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(的Int32
  深度)在
  System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(字符串
  输入的Int32 depthLimit,
  串行的JavaScriptSerializer)的
  System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(的JavaScriptSerializer
  串行,字符串输入,输入类型,
  INT32 depthLimit)在
  System.Web.Script.Serialization.JavaScriptSerializer.Deserialize [T](字符串
  输入)在
  System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext的
  背景下,的JavaScriptSerializer
  串行器)的
  System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData
  methodData,HttpContext的背景下)的
  System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext的
  背景下,WebServiceMethodData
  methodData)

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)"

这是我的WebService的:

This is my WebService:

/// <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();
    }

}

在这里,我的客户端code:

And here, my client side code:

 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);                                 

                             }  
                         });

在哪里'开始'和'结束的时间是两个JavaScript'日期'的对象。

Where 'start' and 'end' time are two javascript 'Date' objects.

推荐答案

那是因为那里是ASP.NET AJAX预计具体的日期/时间线格式 - \\ /日期的形式它(X )\\ /,其中x是自1970年1月1日经过的午夜UTC毫秒的数量。所以基本上,你需要使用一些辅助函数,将转换您的JS日期到所需要的格式,而调用服务(反之亦然,日期/时间JSON从服务到JS日期/时间对象)。

Thats because there is specific date/time wire format that ASP.NET Ajax expects - its of form of "\/Date(x)\/", where x is the number of ms elapsed since Jan. 1, 1970 at midnight UTC. So essentially, you need to use some helper function that will convert your JS dates into the needed format while calling the service (and vice versa, date/time json from service to JS date/time object).

所以,你必须改变code片段,如

So, you have to change code fragment such as

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

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

要使用下面的插件快捷的方式:

Quickest way to use below plug-in:

<一个href=\"http://schotime.net/blog/index.php/2008/07/01/jquery-plugin-for-aspnet-ajax-jmsajax/\">http://schotime.net/blog/index.php/2008/07/01/jquery-plugin-for-aspnet-ajax-jmsajax/

您可以在下面文章中找到更多的信息:

You can find more info in below articles:

<一个href=\"http://www.overset.com/2008/07/18/simple-jquery-json-aspnet-webservice-datetime-support/\">http://www.overset.com/2008/07/18/simple-jquery-json-aspnet-webservice-datetime-support/

<一个href=\"http://schotime.net/blog/index.php/2008/06/19/jquery-ajax-aspnet-and-dates/\">http://schotime.net/blog/index.php/2008/06/19/jquery-ajax-aspnet-and-dates/

<一个href=\"http://msmvps.com/blogs/luisabreu/archive/2009/08/19/jquery-full-control-with-the-ajax-function.aspx\">http://msmvps.com/blogs/luisabreu/archive/2009/08/19/jquery-full-control-with-the-ajax-function.aspx

这篇关于如何将日期时间值传递给一个WebMethod(ASMX)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆