2012-10-19 2 views
2

Est-il possible de publier un paramètre DateTime sur une méthode Web dans un service Web ASMX (à l'aide d'un appel de style RPC sérialisé JSON)?Passage d'un paramètre DateTime au service Web ASP.NET

J'envoie un DateTime au navigateur et celui-ci est sérialisé dans le formulaire/Date (1350639464100 + 0100) /. Je peux ensuite utiliser l'excellente bibliothèque moment.js pour analyser la date, l'afficher sur la page, etc.

Mon problème est de renvoyer cette date au serveur à l'aide d'un message AJAX envoyé à mon service Web. Ma méthode web ressemble à quelque chose comme ceci:

[WebMethod(EnableSession = true)] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public void Save(DateTime date) 
{ 
    // Do stuff 
} 

Si je tente d'envoyer une date dans le même format que celui qu'il est descendu (/ Date (1350639464100 + 0100) /) puis je reçois une erreur:

/Date (1350639464100 + 0100)/n'est pas une valeur valide pour DateTime.

Existe-t-il de meilleures alternatives à l'envoi en tant que chaîne, puis l'analyse de la valeur sur le serveur? Idéalement, j'aimerais pouvoir envoyer des objets lors d'un aller-retour depuis et vers le serveur sans avoir à modifier les propriétés de date qu'ils peuvent contenir.

Merci pour toute aide!

Répondre

0

Vous pouvez modifier le type de paramètre à chaîne et vous pouvez convertir cette chaîne à tout type que vous voulez

public void Save(String date){ 
    *Code* 
    } 
+0

Ceci est une option de repli raisonnable mais je préfère utiliser un Paramètre DateTime directement car il permet de passer les objets vers et depuis le serveur sans avoir à modifier les propriétés avant de les envoyer. –

+0

Vous devez convertir la date (1350639464100 + 0100) côté client en un format de date acceptable à partir du serveur. Par exemple: jj/mm/aaaa ou mm/jj/aaaa. Essayez d'envoyer ce format comme une chaîne ... le serveur le reconnaîtra comme une date –

+0

Merci pour votre aide Otto, envoyer la date sous forme de chaîne (mais en utilisant toujours un type de paramètre DateTime) fonctionne bien. Je n'avais pas pensé à essayer cela avant de le suggérer, et j'étais inquiet de la localisation de cette approche. Il semble que l'envoi de la date dans un format universel (par exemple, 2012-10-19) est une valeur sûre. –

7

J'ai ce qui travaille maintenant comme suit.

méthode Web en utilisant un paramètre DateTime:

[WebMethod(EnableSession = true)] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public void Save(DateTime date) 
{ 
    // Do stuff 
} 

post AJAX la méthode web envoyant dates comme des chaînes (dans un format international pour éviter les problèmes de localisation):

{"date": "2012-10-19"} 

ou, en utilisant moment.js :

{"date": moment().format("YYYY-MM-DD HH:mm:ss")} 
+0

il travaille aussi dans Postman sans encapsuler entre guillemets –

Questions connexes