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 :

Parcourir les champs d'un modèle dans une vue en automatique


Sujet :

ASP.NET MVC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2012
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 146
    Par défaut Parcourir les champs d'un modèle dans une vue en automatique
    Bonjour à tous,

    J'aimerais pouvoir parcourir tous les champs de mon modèle en automatique depuis ma vue.
    Je ne dispose pas à l'avance de la liste des champs.

    Dans mon controller:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     public ActionResult Index()
            {
                var vm = new StatistiquesModels();
                vm.prod_cd93_cs8_lad = db.prod_cd93_cs8_lad.ToList();
     
                return View(vm);
            }
        }
    et dans la vue, je peux afficher chaque champs de cette manière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <table class="table" style="font-size:11px;">
     
                    @foreach (var p in Model.MonModel)
                    {
                        <th>@p.monChamps1</th>                    
                        <th>@p.monChamps2</th>                    
                        <th>@p.monChamps3</th>                    
                        <th>@p.monChamps4</th>
                        <th>@p.monChamps5</th>                    
                         [....]
                    }               
    </table>
    J'aimerais pouvoir récupérer automatiquement la liste de champs ainsi que le nom de champs (afin de faire des traitements de chaînes) et de pouvoir les afficher dans une boucle.

    Merci d'avance de votre aide !

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    google : reflection c# get properties
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2012
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 146
    Par défaut
    Merci de ta réponse,
    J’ai essayé de faire un GetType().GetProperties(), mais je n’arrive à atteindre les valeurs ni le nom.

    Aurais tu un exemple ?
    Merc i d’avance

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    getproperties tout seul ne fonctionne pas, il faut préciser quels types de propriétés on veut
    GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance) est le plus courant : les propriétés public non static
    ca retourne une collection de PropertyInfo et sur cette classe il y a .Name, .Propertytype etc...
    il y a aussi .GetValue(une instance) qui permet d'avoir la valeur pour une instance (ca ne devine pas l'instance car le PropertyInfo est lié au type)

    si tu ne veux pas toujours toutes les propriétés tu peux créer un attribut (en faisant un classe héritant de System.Attribute)
    tu peux alors tagger les propriétés utiles avec [MyAttribute] au dessus
    tu peux faire une recherche de propriétés ayant cet attribut

    pour aller plus loin tu peux même faire des attributs qui décrivent un fonctionnement de la propriété pour savoir ensuite comment les traiter (si elle doivent être traitées différement)


    ! : la réflection est assez gourmande en temps d'exécution, pour les propriétés d'une instance ca reste transparent, mais quand on travaille sur une collection assez grande ca plombe réellement (surtout GetValue et SetValue)
    (le level au dessus c'est un expression tree compilé à partir de reflection, c'est aussi pratique et souple que la reflection, avec les performances qu'aurait du code écrit, par contre c'est pas évident à écrire et à relire ^^)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre confirmé
    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2012
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 146
    Par défaut
    Merci pour toutes ces informations
    Malheureusement, je n'arrive toujours pas à afficher les informations.

    Dans ma vue:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     @foreach (System.Reflection.PropertyInfo system in Model.GetType().GetProperties(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.FlattenHierarchy | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.InvokeMethod))
    {                    
                             <tr>
                            <th>@system.Name</th>
    </tr>
     
                    }
    J'obtiens le nom des deux propriétés de mon modèle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class StatistiquesModels
        {
            public List<Modele1> Modele1 { get; set; }
     
            public List<Modele2> Modele { get; set; }
     
     
        }
    Mais j'aimerais récupéré la liste des champs du Modele1 (nom et valeur)

    Merci d'avance de ton aide.

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    si tu demandes les properties sur la classe StatistiquesModels c'est normal qu'il ne te retourne que modele1 et modele
    si tu veux parcourir les collections il manque un foreach dans le foreach
    et si tu veux après faire le tour des propriétés contenu dans les item des collection il faut un autre for each
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/08/2009, 17h39
  2. Relier les champs de deux tables dans une interface graphique
    Par laurentlorient dans le forum Débuter
    Réponses: 1
    Dernier message: 26/04/2009, 22h34
  3. Réponses: 2
    Dernier message: 07/08/2007, 19h48
  4. Réponses: 4
    Dernier message: 21/06/2007, 13h33
  5. Récupérer les champs d'un formulaire dans une jsp
    Par lalyly dans le forum Struts 1
    Réponses: 1
    Dernier message: 19/04/2007, 10h50

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