IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

[AJAX] comment passer un datetime via JSON dans une requête ajax ?


Sujet :

AJAX

  1. #1
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Points : 138
    Points
    138
    Par défaut [AJAX] comment passer un datetime via JSON dans une requête ajax ?
    Bonjour,
    J'utilise mvc4/razor/jquery/ajax/json. J'ai la classe suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    namespace Web.Models
    {
        public class TransactionFilter
        {
            public TransactionFilter()
            {
                TransactionBeginTradeDateCriteria = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1, 1, 1, 1);
                TransactionMarketCriteria = int.Parse(ConfigurationManager.AppSettings["DefaultMarketID"]);
            }
            public DateTime? TransactionBeginTradeDateCriteria { get; set; }
            public DateTime? TransactionEndTradeDateCriteria { get; set; }
            public DateTime? TransactionBeginSettlementDateCriteria { get; set; }
            public DateTime? TransactionEndSettlementDateCriteria { get; set; }
            public int? TransactionMarketCriteria { get; set; }
            [Isin(ErrorMessage = "Isin code is not correct.")]
            public string TransactionISINCriteria { get; set; }
        }
    }
    J'ai aussi cette page razor Index.cshtml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <script type="text/javascript">
        $(function () {
            $.ajax({
                type: "POST",
                url: '@Url.Action("IndexPartial")',
                data: JSON.stringify(@Html.Raw(Json.Encode(Session["TransactionFilter"] as Web.Models.TransactionFilter))),
                datatype: 'json',
                contentType:"application/json; charset=utf-8",
                success: function (response) {
                    $("#Container").html(response);
                },
                error: function (xhr, ajaxOptions, thrownError) {
                    alert("An error occured at " + (new Date()).toString());
                }
            });
        });
    </script>
    Et mon controller MVC :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    namespace Web.Controllers
    {
        public class TransactionController : Controller
        {
    ...
            public ActionResult IndexPartial(TransactionFilter tfArg)
            {
                TransactionFilter tf = new TransactionFilter();
                tf.TransactionBeginTradeDateCriteria = tfArg.TransactionBeginTradeDateCriteria;
     
                tf.TransactionEndTradeDateCriteria = tfArg.TransactionEndTradeDateCriteria;
     
                tf.TransactionBeginSettlementDateCriteria = tfArg.TransactionBeginSettlementDateCriteria;
     
                tf.TransactionEndSettlementDateCriteria = tfArg.TransactionEndSettlementDateCriteria;
     
                tf.TransactionMarketCriteria = tfArg.TransactionMarketCriteria;
     
                if (!string.IsNullOrEmpty(tfArg.TransactionISINCriteria))
                    tf.TransactionISINCriteria = tfArg.TransactionISINCriteria;
                else
                    tf.TransactionISINCriteria = null;
     
                Session["TransactionFilter"] = tf;
     
                Tuple<ISingleResult<sel_transactionsResult>, TransactionFilter> tuple = new Tuple<ISingleResult<sel_transactionsResult>, TransactionFilter>(DataProvider.GetTransactions(Convert.ToInt32(Session["CustomerOID"]), tf), tf);
                return PartialView("IndexPartialView", tuple);
            }
    ...
        }
    }
    }
    Mon problème est que la date que je mets dans TransactionBeginTradeDateCriteria est le 29 Mars 2013, mais côté server, la valeur est null (juste pour la date, je veux dire par là que l'objet TransactionFilter a été correctement transféré et recréé, sauf pour les données DateTime donc).
    Quand je debug, je peux voir que la valeur de l'arguemnt ajax est :
    data:
    JSON.stringify({"TransactionBeginTradeDateCriteria":"\/Date(1364511600000)\/", "TransactionEndTradeDateCriteria":null, "TransactionBeginSettlementDateCriteria":null, "TransactionEndSettlementDateCriteria":null, "TransactionMarketCriteria":292104,"TransactionISINCriteria":null}),
    Il a donc bien une valeur, mais le server reçoit null pour TransactionBeginTradeDateCriteria. Est-ce que vous avez une idée pour passer correctement une datetime à l'intérieur d'un object via JSON ?
    Par avance merci,
    Julien
    J'ai trouvé sur une forum quelqu'un qui disait que la dateime devait se terminer par -0000, j'ai donc fait un replace en dur, mais cela ne fonctionne pas mieux.

  2. #2
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Points : 138
    Points
    138
    Par défaut
    J'ai résolu mon problème en modifiant cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data: JSON.stringify(@Html.Raw(Json.Encode(Session["TransactionFilter"] as Web.Models.TransactionFilter))),
    par cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data: JSON.stringify(@Html.Raw(Json.Encode(Session["TransactionFilter"] as Web.Models.TransactionFilter))).replace(/\/Date\(\d+\)/g, function (a) { return '\\' + a + '\\'; }),

    Ça vient de http://stackoverflow.com/questions/6...sonvalueprovid

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Jena] Comment inserer des individus via Java dans une ontologie ?
    Par ezzarai dans le forum Frameworks
    Réponses: 0
    Dernier message: 23/11/2015, 12h19
  2. [AJAX] Ecriture dans un fichier json avec une requête AJAX
    Par DarkPoster14 dans le forum jQuery
    Réponses: 1
    Dernier message: 10/07/2012, 09h45
  3. Réponses: 1
    Dernier message: 10/01/2012, 15h35
  4. Réponses: 0
    Dernier message: 29/07/2009, 16h39
  5. Comment passer un tableau à deux dimensions dans une fonction
    Par Niko_de_bordo dans le forum Débuter
    Réponses: 2
    Dernier message: 02/07/2009, 15h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo