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

ASP.NET MVC Discussion :

ASP.Net MVC - JQuery Ajax call avec tableau JSON en paramètre


Sujet :

ASP.NET MVC

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2011
    Messages : 40
    Points : 35
    Points
    35
    Par défaut ASP.Net MVC - JQuery Ajax call avec tableau JSON en paramètre
    Bonjour,

    J'ai besoin de faire u appel Ajax à une action de mon controller (jusque là rien de bien sorcier).

    Et j'ai besoin de passer un tableau d'entiers (identifiants) en paramètre de cette action.

    Mais quoi que je fasse, lorsque l'action est appelée, le paramètre est null.

    Comment puis-je récupérer la valeur passée en paramètre (qui apparemment est converti en JSON) ?

    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
     var tmpIds = [];
     
            $(".list-group-item").each(function(pIndex){
                tmpIds [pIndex] = $(this).attr('id');
            });
     
    $.ajax({
                url: '@Url.Action("LoadItemsById", "MonController")',
                type: 'GET',
                dataType: 'json',
                cache: false,
                data: { IdList: tmpIds },
                success: function (result){
     
                },
                error: function (result) {
     
                }
            });
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    [HttpGet]
    public ActionResult LoadItemsById(List<int> IdList)
    {
        if(IdList== null)
       {
            return Json(null, JsonRequestBehavior.AllowGet);
        }
    ...
    J'ai essayé avec une List<int> et un int[], les deux ont le même comportement
    Et j'ai vérifié, mon tableau contient bien des valeur dans mon JS

    Cordialement,
    TL

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 501
    Points
    1 501
    Par défaut
    Salut,

    le data encode en json n'est pas nativement interprete par le value provider de mvc, il faut donc le faire sois-meme: http://stackoverflow.com/questions/5...r-as-parameter
    ou
    http://webcognoscere.com/post/How-to...er-Action.aspx

    Donc en substance il faut recuperer l'object json puis le convertir en json, ou cote json convertir l'objet json puis l'envoyer et l'utiliser normalement coter serveur.

    Enfin, ajouter son propre value provider est possible mais sera globale au projet.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2011
    Messages : 40
    Points : 35
    Points
    35
    Par défaut ASP.Net MVC - JQuery Ajax call avec tableau JSON en paramètre
    Salut Mermich,

    Merci pour ta solution.

    Entre temps, j'ai trouvé une autre solution, qui fonctionne également. Mais peut-être qu'elle est moins propre. Qu'en penses-tu ?

    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
    var tmpIds = [];
     
            $(".list-group-item").each(function(pIndex){
                tmpIds [pIndex] = $(this).attr('id');
            });
     
    $.ajax({
                url: '@Url.Action("LoadItemsById", "MonController")',
                type: 'GET',
                dataType: 'json',
                cache: false,
                data: { IdList: JSON.stringify(tmpIds) },
                success: function (result){
     
                },
                error: function (result) {
     
                }
            });
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [HttpGet]
    public ActionResult LoadItemsById(string IdList)
            {
                DataContext.Configuration.LazyLoadingEnabled = true;
     
                if(string.IsNullOrEmpty(IdList))
                {
                    return Json(null, JsonRequestBehavior.AllowGet);
                }
     
                JavaScriptSerializer js = new JavaScriptSerializer();
                int[] Ids = js.Deserialize<int[]>(IdList);
    ...

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 501
    Points
    1 501
    Par défaut
    Bah tu fais la seconde solution: tu convertis le json en string cote client, puis parse celui-ci cote serveur.

    Pour la conversion, vu que ce n'est qu'une liste d'int, sans-doute separee par des ',' tu aurais put avoir la methode suivante dans ton controlleur:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public ActionResult LoadItemsById(string IdList)
            {
                var list = IdList.Split(',').Select(s => int.Parse(s));
                ...
            }
    Ce que j'en pense, je n'en sais pas, cela depend du projet, du contexte, de l'equipe etc.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2011
    Messages : 40
    Points : 35
    Points
    35
    Par défaut ASP.Net MVC - JQuery Ajax call avec tableau JSON en paramètre
    Merci beaucoup, je vais valider cette réponse qui fonctionne à merveille

    A+
    TL

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

Discussions similaires

  1. [Débutant] ASP.NET MVC Razor - tri multiple avec Kendo
    Par Faboogy dans le forum ASP.NET MVC
    Réponses: 0
    Dernier message: 19/08/2015, 15h28
  2. asp.net mvc MVCContrib Grid avec jquery.datatable
    Par mourbare dans le forum ASP.NET MVC
    Réponses: 0
    Dernier message: 25/10/2011, 13h08
  3. Réponses: 8
    Dernier message: 15/09/2010, 08h52
  4. Réponses: 2
    Dernier message: 21/09/2009, 16h10
  5. Réponses: 6
    Dernier message: 25/11/2008, 11h02

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