Comment passer d'une valeur DateTime WebMethod (ASMX)
J'ai un WebMethod avec un paramètre défini en DateTime. Quand je l'appelle
webservice, j'obtiens cette erreur:
à
Système.Web.Script.La sérialisation.JavaScriptObjectDeserializer.DeserializePrimitiveObject()
au
Système.Web.Script.La sérialisation.JavaScriptObjectDeserializer.DeserializeInternal(Int32
profondeur) à
Système.Web.Script.La sérialisation.JavaScriptObjectDeserializer.DeserializeDictionary(Int32
profondeur) à
Système.Web.Script.La sérialisation.JavaScriptObjectDeserializer.DeserializeInternal(Int32
profondeur) à
Système.Web.Script.La sérialisation.JavaScriptObjectDeserializer.BasicDeserialize(String
d'entrée, Int32 depthLimit,
JavaScriptSerializer sérialiseur) à
Système.Web.Script.La sérialisation.JavaScriptSerializer.Deserialize(JavaScriptSerializer
sérialiseur, Chaîne d'entrée, Type de type de,
Int32 depthLimit) à
Système.Web.Script.La sérialisation.JavaScriptSerializer.Désérialiser[T](String
d'entrée) à
Système.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext
contexte, JavaScriptSerializer
sérialiseur) à
Système.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData
methodData, HttpContext contexte) à
Système.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext
contexte, WebServiceMethodData
methodData)"
C'est mon 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();
}
}
Et ici, de mon côté client 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);
}
});
Où "start" et "end", le temps de javascript 'Date' objets.
OriginalL'auteur Cleiton | 2011-01-07
Vous devez vous connecter pour publier un commentaire.
C'est parce qu'il est spécifique de la date/heure format de câble qui ASP.NET Ajax s'attend - son de la forme de
"\/Date(x)\/"
, où x est le nombre de ms écoulées depuis Janv. 1, 1970 à minuit UTC. Donc, essentiellement, vous avez besoin d'utiliser certaines fonction d'assistance qui vous permet de convertir vos JS dates dans le besoin de formater tout en appelant le service (et vice-versa, date/heure json du service à la JS date/heure de l'objet).Donc, vous avez à changer fragment de code comme
à
Façon la plus rapide d'utilisation ci-dessous plug-in:
http://schotime.net/blog/index.php/2008/07/01/jquery-plugin-for-aspnet-ajax-jmsajax/
Vous pouvez trouver plus d'info ci-dessous les articles:
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
Le jMsAjax plugin semble ne pas fonctionner avec la dernière version de jQuery (1.6.2).
vous pouvez signaler votre problème/bug à l'auteur que des commentaires de son blog (le lien dans la réponse).
OriginalL'auteur VinayC
Cela a fonctionné pour moi:
Ce qui le convertit en un format comme "2014-06-04T14:26:27.129 Z", qui à mon service web est heureux de l'accepter pour un DateTime paramètre.
OriginalL'auteur rdans