Bonjour à tous,
J'ai un petit souci avec l'appel asynchrone de méthodes du controller avec des paramètres...

Je m'explique.

Voici mon objet que je passe en paramètre :

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
 
/// <summary>
    /// Objet RestaurantVoucherTotal : Total des tickets restaurant
    /// </summary>
    [Serializable]
    public class RestaurantVoucherTotal
    {
        /// <summary>
        /// Id des montants totaux des tickets restaurants
        /// </summary>
        public int Id { get; set; }
 
        /// <summary>
        /// Nombre total de tickets restaurant
        /// </summary>
        public int NumberTotal { get; set; }
 
        /// <summary>
        /// Montant total de ticket restaurant
        /// </summary>
        public string AmountTotal { get; set; }
 
        /// <summary>
        /// Liste de Tickets restaurant
        /// </summary>
        public IEnumerable<RestaurantVoucher> RestaurantVoucherList { get; set; }
    }
Cet objet RestaurantVoucherTotal contient une liste de RestaurantVoucher, dont voici sa définition :

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
/// <summary>
    /// RestaurantVoucher Class : Ticket Restaurant
    /// </summary>
    [Serializable]
    public class RestaurantVoucher
    {
        /// <summary>
        /// Id du ticket Restaurant
        /// </summary>
        public int Id { get; set; }
 
        /// <summary>
        /// Nom de l'émetteur
        /// </summary>
        public string Name { get; set; }
 
        /// <summary>
        /// Valeur d'un titre restaurant
        /// </summary>
        public int Value { get; set; }
 
        /// <summary>
        /// Nombre de titre restaurant
        /// </summary>
        public int Number { get; set; }
 
        /// <summary>
        /// Montant calculé automatiquement
        /// </summary>
        public string Amount { get; set; }
    }
Voici mon controller (pas encore implémenté, il retourne juste le paramètre...) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
/// <summary>
        /// Valide une entrée de tickets restaurant
        /// </summary>
        /// <param name="datas">Liste de tickets restaurant à ajouter</param>
        /// <returns>Les tickets restaurant enregistrés</returns>
        [HttpPost]
        public ActionResult ValidateRestaurantVoucher(RestaurantVoucherTotal datas)
        {
            return Json(datas);
        }
Maintenant, au niveau de ma vue, j'utilise $.ajax pour envoyer la requête :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$.ajax({
            type: 'POST',
            url: '<%=Url.Action("ValidateRestaurantVoucher", "CashBook") %>',
            data: ....,
            dataType: "json",
            traditional: true,
            success: function(data) {
                // Code pour la réussite de la requête
                }
            },
            error: function() {
                // Code en cas d'erreur de ma requête
            }
        });
Il faut que je lui passe des données, donc j'essaie de construire avant un objet JSON et de le passer en paramètre, j'arrive à remplir le "NumberTotal" et le "AmountTotal" de mon objet RestaurantVoucherTotal, mais la liste de RestaurantVoucher est soit null, soit contient les X données que je lui passe, mais chaque ligne de ma liste a ses données nulles ou égales à 0 suivant les méthodes que j'essaie...

Voici comment j'essaie de passer les données :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
var nbRestaurantVoucherTotal = $("#txtTotalNbRestaurantVoucher").val();
        var amountTotal = $("#txtTotalMontantRestaurantVoucher").val();
 
        var voucher = { RestaurantVoucherList: {} };
        $('table tr.row').each(function(index) {
            voucher.RestaurantVoucherList[index] = ({ 
                'Value': $(this).children().nextAll().eq(0).text(),
                'Number': parseInt($(this).children().nextAll().eq(1).text()),
                'Amount': $(this).children().nextAll().eq(2).text()
            });
        });
        voucher.NumberTotal = nbRestaurantVoucherTotal;
        voucher.AmountTotal = amountTotal;
Toutes les récupérations de variables remontent bien une valeur.
J'ai essayé avec une liste de int ou de string, et dans ce cas cela fonctionne...


Auriez-vous une solution pour remplir ma liste de RestaurantVoucher depuis le javascript ?

Merci d'avance pour votre aide !