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 :

passage resultat requete a une vue avec ViewData.Model [Débutant]


Sujet :

ASP.NET MVC

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 144
    Points : 66
    Points
    66
    Par défaut passage resultat requete a une vue avec ViewData.Model
    Bonjour, j'essaie de passer les résultat d'une requete à une vue typée mais je n'y arrive pas.

    Au début, la premiere solution que j'ai mis en place était une class modele sur la base de la table d'ou je souhaite récupérer les infos.
    Un context, et dans le controler je passe à la vue concerné toute la table. Pas de soucis j'ai réussi à récupérer les infos.

    Par contre, j'ai en fait besoin de faire une jointure, j'ai donc décider d'utiliser ViewData.Model

    Dans le model :

    Code c# : 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
    namespace RSTestSansEdm.Models
    {
        public partial class TAssociation
        {
            [Key]
            public int Idassociation { get; set; }
            public string Nomassociation { get; set; }
        }
     
     
        public partial class Tmembre
        {
     
            [Key]
            public int Idmembre { get; set; }
            public string Nommembre { get; set; }
            public string Prenommembre { get; set; }
            public string Mailmembre { get; set; }
            public string SRCImage { get; set; }
            public int Idassociation { get; set; }
     
            //public virtual IEnumerable<Tmembre> MembreAssociation { get; set; }
     
        }
     
    }

    Dans le controller :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Tmembre ListeMembre = db.TmembresansEDMdb.Find(1);
     
     
     
                ViewData.Model = (from a in db.TmembresansEDMdb
                                 join b in db.dbTassociation on a.Idassociation equals b.Idassociation
                                 where a.Idassociation == ListeMembre.Idassociation
                                 select new Tmembre { a.Idmembre, a.Nommembre, a.Prenommembre, a.Mailmembre, a.SRCImage, a.Idassociation });
     
     
     
     
                return View(ViewData.Model);


    Ca bloque dans le controler :

    Error 1 Cannot initialize type 'RSTestSansEdm.Models.Tmembre' with a collection initializer because it does not implement 'System.Collections.IEnumerable'

    Merci.

    (Je démarre en MVC, )

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 30
    Points : 32
    Points
    32
    Par défaut
    Pour quel type de vue tu retournes ton ViewData.Model, Index ou formulaire ?

    Au debut de ta vue si tu as ça :
    @model IEnumerable<MonProjet.ViewModel.XXXX> Tu dois retourner une liste (pour les page Index par exemple)
    @model MonProjet.ViewModel.XXXX Tu dois retourner un objet (pour les pages Details, Formulaire ...)


    Tmembre ListeMembre = db.TmembresansEDMdb.Find(1); Ceci n'est pas une liste, juste un Tmembre.

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 144
    Points : 66
    Points
    66
    Par défaut
    Hello Neka, je pense que l'utilisation de View.Datamodel dans mon cas n'était pas adapté car j'ai besoin de données de deux tables (peu être est-ce possible avec View.Datamodel, mais pas réussi).

    J'ai donc créer moi même un model :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        public class myviewmodel
        {
            public Tmembre tmembre { get; set; }
            public List<Tmembre> lstmembre { get; set; }
     
            public TAssociation tassociation { get; set; }
            public List<TAssociation> lstassociation { get; set; }
     
        }

    puis dans le controller :


    Code c# : 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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
            public ActionResult ListeMembre()
            {
                ViewBag.Message = "Liste des membres";
     
                myviewmodel mymodel = new myviewmodel();
                Tmembre Membre = db.TmembresansEDMdb.Find(1);
                TAssociation Association = db.dbTassociation.Find(Membre.Idassociation);
     
                if (Request["boutonmembre"] == "Ajouter")
                {
                    bool formok = true;
     
                    Tmembre Membreajoute = new Tmembre();
                    if (Request["nom"] != "")
                    {
                        Membreajoute.Nommembre = Request["nom"];
                    } else {
                        formok = false;
                    }
     
                    if (Request["prenom"] != "")
                    {
                        Membreajoute.Prenommembre = Request["prenom"];
                    }
                    else {
                        formok = false;
                    }
     
                    if (Request["mail"] != "")
                    {
                        Membreajoute.Mailmembre = Request["mail"];
                    }
                    else
                    {
                        formok = false;
                    }
     
                    if (formok == true)
                    {
                        Membreajoute.Idassociation = Association.Idassociation;
                        db.TmembresansEDMdb.Add(Membreajoute);
                        db.SaveChanges();
                    }
                    else
                    {
                        ModelState.AddModelError("nom", "Information formulaire invalide");
                    }
     
                }
     
                ViewData["Nomassociation"] = Association.Nomassociation;
                ViewData["Idassociation"] = Membre.Idassociation;
    // ICI JE RECUPERE LES INFOS DES DEUX TABLES
                mymodel.lstassociation = db.dbTassociation.ToList();
                mymodel.lstmembre = (from a in db.TmembresansEDMdb
                                  where a.Idassociation == Membre.Idassociation
                                  select a ).ToList();
                return View(mymodel);
            }

    Et dans la vue :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                        @foreach (var item in Model.lstassociation)
                        {
     
     
     
            @foreach (var item in Model.lstmembre) {

    Merci

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

Discussions similaires

  1. Réponses: 16
    Dernier message: 17/06/2005, 15h44
  2. Creer une vue avec gestion de date
    Par jf-nigou dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 01/06/2005, 16h36
  3. Créer une vue avec des requêtes UNION ?
    Par webtheque dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/04/2005, 12h37
  4. Resultat requete dans une seule colonne
    Par mathieu--g dans le forum Sybase
    Réponses: 2
    Dernier message: 08/07/2003, 13h42
  5. Export d'une vue avec LEFT JOIN
    Par schnourf dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/05/2003, 13h57

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