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.