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

C# Discussion :

Bug lorsque ce n'est pas une list [Débutant]


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Etudiant informatique
    Inscrit en
    Octobre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Etudiant informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Bug lorsque ce n'est pas une list
    Bonjour,

    Je rencontre actuellement un problème assez énervant, malheureusement je n'arrive pas à le debug.

    J'explique:
    J'ai ajouté un nouveau champ dans ma page cshtml, qui doit faire le même affichage que les autres cas seulement la lorsque je tape dans mon champs le numéro de l'ID de des campagnes (il peut y avoir 1 ID pour plusieurs clients), il faut qu'il me l'affiche.

    Actuellement, j'utilise une liste pour l'affichage générale des campagnes, qui prend "All", "accepted"..., je veux trier par ID maintenant, mais lorsque j'utilise une TextBoxFor, au moment de la compilation j'ai toujours une erreur dans mon foreach de mon cstml dans le ViewBag, j'arrive pas à comprendre j'ai eu beau fouillé mon code des centaines de fois j'ai l'impression que mon ViewBag n'arrive pas à stocker quand ce n'est pas une liste que j'envoie!

    Voici les quelques gestions que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                if (model.CampaignID == 0)
                {
                    this.ViewBag.AffiliateOffers = affiliateOfferApplicationsLogic.GetLastestAffiliateOffers(model.FilterID);
                }            
                else
                {
                    this.ViewBag.AffiliateOffers = affiliateOfferApplicationsLogic.GetAffiliateOffersByCampaignID(model.CampaignID);
                }
                }
    (ce cas me permet de gérer si l'ID == 0 il prend en compte que l'affichage de base qu'il fait avec sa liste, sinon il rentre dans un autre élément du controller)

    Les controllers:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            public List<affiliateOfferApplications> GetLastestAffiliateOffers(int statusID, int limit = LASTEST_OFFERS_LIMIT)
            {
                return (from u in context.affiliateOfferApplications where u.ApprovalStatus == statusID || statusID == -1 select u).OrderByDescending(u => u.ID).Take(limit).ToList();
            }
    (Celui-ci fonctionne parfaitement, pas besoin de le toucher)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            public campaigns GetAffiliateOffersByCampaignID(int campaignID)
            {
                return (from u in context.affiliateOfferApplications where u.CampaignID == campaignID select u).FirstOrDefault<affiliateOfferApplications>();
            }
    (Celui avec qui je retrouve des soucis, pourtant je récupère bien le bon ID qui est rentré dans ma case)

    Puis pour finir mon 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
     @foreach (affiliateOfferApplications offer in this.ViewBag.AffiliateOffers)
                                {
                                    <tr style="height: 65px">
                                        <td style="padding-right: 5px; text-align: left">@offer.ID</td>
                                        <td style="padding-right: 5px; text-align: left">@offer.publishers.Email (@offer.PublisherID)</td>
                                        <td style="padding-right: 5px; text-align: left">@offer.campaigns.PublicName (@offer.campaigns.ID)</td>
                                        <td style="padding-right: 5px; text-align: left">
                                            @using (Html.BeginForm())
                                            {
                                                @Html.HiddenFor(m => m.FilterID)
                                                @Html.DropDownList("offerStatus", ((CommonController)this.ViewContext.Controller).GetAffiliateOfferApplicationStatusesList(offer.ApprovalStatus), new { @class = "formShort" })
     
                                                <button type="submit" name="OfferID" value="@offer.ID" class="orangeButton">Update</button>
                                            }
    J'ai coupé des parties mais je pense que c'est suffisant, Microsoft Visual Studio passe tous les breakpoint mais bloque seulement au cshtml dans la ligne du foreach... L'erreur que j'ai c'est "'System.Collections.IEnumerable" quelque chose du genre.

    Si besoin d'information complémentaire je suis la! Je suis sur que c'est une simple erreur mais j'arrive pas à le trouver que c'est stressant

    Je vous remercie d'avance!

  2. #2
    Membre chevronné

    Homme Profil pro
    Appui fonctionnel senior
    Inscrit en
    Juin 2007
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Appui fonctionnel senior
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 461
    Points : 2 211
    Points
    2 211
    Par défaut
    Bonsoir,

    Avant tout, tu t'es trompé de section en postant. Tu aurais plus de réponses en postant dans la catégorie .Net/ASP.NET MVC.
    Sinon, de ce que j'ai pu comprendre de ton problème, je suppose que le modèle de page cshtml est une liste (ou au moins un IEnumerable<T>), il est donc normal que tu rencontres une erreur :

    • Dans le premier cas, tu retournes tous, il est donc normal d'avoir une liste (même s'il n'y a qu'un seul élément)
    • Dans le second cas; tu retournes qu'un seul objet. Mais ta page attends une liste ! Il est donc normal que ça plante.


    Si c'est bien le cas, deux possibilités :
    • tu dupliques ta page, une qui accepte une liste, et l'autre qui accepte qu'un seul objet. Le contrôleur route ensuite vers la bonne page en fonction des données.
    • au lieu de simplement renvoyer ton objet, tu renvoie un tableau (ou liste) contenant ton objet :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      this.ViewBag.AffiliateOffers = new Offer[] {affiliateOfferApplicationsLogic.GetLastestAffiliateOffers(model.FilterID) };

    Personnellement, j'ai une préférence pour la seconde version, plus simple à mettre en œuvre.

    J'espère avoir répondu à ta question

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Etudiant informatique
    Inscrit en
    Octobre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Etudiant informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Hello, merci pour ton aide! J'ai renvoyé une list à la place d'un seul objet et ça fonctionne, mais honnêtement avant d'avoir rédigé ça je l'avais fais et je comprends pas pourquoi ça fonctionne maintenant
    Peut-être parce que j'ai modifié un peu mon controller mais bon, mystère!

    Merci encore, bonne journée

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

Discussions similaires

  1. cmd n'est pas une application win32 valide
    Par dlecteur dans le forum Windows XP
    Réponses: 28
    Dernier message: 01/08/2006, 23h22
  2. radiobutton erreur n'est pas une valeur entière correcte
    Par pierrot67 dans le forum Bases de données
    Réponses: 3
    Dernier message: 12/03/2006, 21h27
  3. erreur '' n'est pas une valeur entière correcte
    Par ffxlenoir dans le forum Langage
    Réponses: 5
    Dernier message: 02/12/2005, 13h57
  4. l'executable n'est pas une win32 valide
    Par joebilou dans le forum Windows
    Réponses: 4
    Dernier message: 28/06/2005, 11h53

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