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 :

Problème variable parfois assignée, parfois pas


Sujet :

ASP.NET MVC

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Points : 14
    Points
    14
    Par défaut Problème variable parfois assignée, parfois pas
    Bonjour à tous, je me trouve dans une situation assez étrange, je m'explique :

    J'ai un objet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    namespace X
    {
       public class Person
       {
          public int Id {get;set;}
          public ICollection<PersonSite> Sites {get;set;}
       }
    }
    (J'ai raccourci volontairement mon objet pour n'avoir qu'un seul champ interessant.)

    Je gère de la pagination sur plusieurs tables en même temps sur la même page (sans JavaScript).

    J'ai donc des méthodes du style :
    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
     
    public ActionResult Sites(int id, int page = 1, int take = 10, string search = null, int order = 1, string sort = null)
            {
                TablePropertiesToSession("PersonSites", page, take, search, sort, order);
                var sites = pManager.PersonSiteManager.Select(predicate:
                    personSite => personSite.PersonId == id && (personSite.PersonSiteType.Label.Contains(search) ||
                    personSite.Site.FullName.Contains(search)),
                    includeProperties: "PersonSiteType").ToList();
                if (Request.IsAjaxRequest())
                {
                    return PartialView("../PersonSite/Index", sites);
                }
                else
                {
                    TempData.Add("Sites", sites);
                    return RedirectToAction("Details", new { id = id });
                }
            }
    Puisque la requète n'est pas une requète ajax, je redirect vers l'actio nde base affichant les détails d'une personne.
    Cette action est la 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    public ActionResult Details(int id)
            {
                ViewBag.SelectList = ContactController.generateContactComboBox();
                ViewBag.CurrentPersonId = id;
                Person person = pManager.PersonManager.Find(id);
                if (TempData["Services"] != null)
                {
                    var list = (ICollection<Service>)TempData["Services"];
                    person.Services = list.ToList();
                }
                if (TempData["Groups"] != null)
                {
                    var list = (ICollection<PersonGroup>)TempData["Groups"];
                    person.Groups = list.ToList();
                }
                if (TempData["Sites"] != null)
                {
                    var list = (ICollection<PersonSite>)TempData["Sites"];
                    person.Sites = list.ToList();
                }
                if(TempData["OrgUnits"] != null)
                {
                    var list = (ICollection<PersonOrganizationalUnit>)TempData["OrgUnits"];
                    person.OrganizationalUnits = list.ToList();
                }
                ViewBag.Picture = Url.Content(new ImageManager().GetPersonPicture(person));
                return View("Details", person);
            }
    Jusque la, rien d'extraordinaire ... Mais !

    Lorsque j'effectue une recherche sur ma table des sites (donc que le paramètre search de la méthode Site est != null),
    la variable Sites de cette même méthode contient (par exemple) 1 élément, mais lorsque je dois modifier la valeur de Person.Sites (qui contient par exemple 10 éléments), si je me trouve en débug, l'assignation se fait bien et Person.Sites ne contient plus qu'un élément, par contre, lorsque je ne suis plus en debug, alors cette variable n'est jamais réassignée et reste donc à 10 éléments.

    Quelqu'un aurait-il un idée du pourquoi du comment svp ?
    Si oui, pourrait-il m'expliquer pourquoi ? Cela fait maintenant quelques jours que je cherche une solution à ce problème et que je ne trouve absolument rien .

    Merci de votre aide.

    EDIT:
    J'ai même remarqué que quelques fois, au lieu que la liste soit remplacée par la nouvelle, celles-ci sont additionnées. Je me retrouve donc avec 2 fois (par exemple) l'élément recherché.

    EDIT 2 :
    Pour contourner le problème je m'y suis pris autrement (mais cela reste assez moche selon moi...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var list = (ICollection<Service>)TempData["Services"];
    person.Services = list.ToList();
    Devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var list = (ICollection<Service>)TempData["Services"];
    person.Services.Clear();
    foreach (var service in list)
       person.Services.Add(service);
    Si quelqu'un a une idée sur une autre facon de faire, je suis preneur. Je n'aime pas trop devoir parcourir ma liste pour ajouter mes éléments...

    Merci

  2. #2
    Membre confirmé Avatar de NicoL__
    Homme Profil pro
    Architecte
    Inscrit en
    Janvier 2011
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Janvier 2011
    Messages : 399
    Points : 577
    Points
    577
    Par défaut
    C'est bien étrange pour analyser ce genre de chose (quand le débugger semble résoudre le problème) le mieux c'est de mettre un log, on remarque souvent un second passage dans le code voir un certain nombre de passage totalement inattendus.
    Sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Person person = pManager.PersonManager.Find(id);
    Semble récupérer une person de la base de données, et person.Sites et surement une propriété de navigation qui contient probablement les Sites associé en base de données. L'assignation est un peu violente pour réaliser une pagination, cela pourrait être interprété comme un update en base de données...
    Il faut peut-être utiliser un autre objet non lié à la base de données pour réaliser l'affichage.

Discussions similaires

  1. Réponses: 5
    Dernier message: 05/05/2010, 22h12
  2. problème de variable qui ne veut pas s'executer
    Par lulu.bleu dans le forum ASP.NET
    Réponses: 1
    Dernier message: 14/10/2009, 09h43
  3. Problème variable random pas très random..
    Par Saten dans le forum C++
    Réponses: 9
    Dernier message: 03/02/2009, 00h13
  4. Réponses: 1
    Dernier message: 03/08/2007, 10h09
  5. Navigateur : parfois n'affiche pas l'image
    Par tiboleo dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 09/06/2006, 17h27

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