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 :

Attribut d'alignement par Entity Framework


Sujet :

C#

  1. #1
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 393
    Points : 2 711
    Points
    2 711
    Par défaut Attribut d'alignement par Entity Framework
    Bonjour tout le monde,

    Dans une application MVC qui reçoit ses données d'Entity Framework, on peut dans le code des données décorer un champ pour indiquer son format numérique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        [DisplayFormat(DataFormatString = "{0:N2}", ApplyFormatInEditMode = true)] 
        public decimal? Freight { get; set; }
    Existe-t-il un attribut à utiliser de la même manière pour dire que cette donnée doit être affichée dans une cellule alignée à droite, ou doit-on systématiquement éditer chaque colonne par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
         <td style="text-align:right;padding-right:20px;">
             @Html.DisplayFor(modelItem => item.Freight)
         </td>

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 752
    Points : 5 457
    Points
    5 457
    Par défaut
    Tu pars dans la mauvaise direction.
    Ton modèle n'est pas sensé gérer les problématiques d'affichage.

    Tu peux éventuellement créer des composants de vue.
    https://learn.microsoft.com/fr-fr/as...aspnetcore-8.0

  3. #3
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 393
    Points : 2 711
    Points
    2 711
    Par défaut
    OK, merci, je dois avouer que je ne la voyais pas venir, celle-là.

    Apparemment, un composant de vue va permettre une mise en forme plus sophistiquée.

    Dans ce cas précis je dois quand même m'avouer un peu perplexe.

    Entity Framework génère automatiquement les vues lorsqu'on génère le contrôleur. Donc, on part d'une vue toute prête, et on va remplacer quelques champs par un composant de vue pour éviter d'insérer un attribut dans une balise. Le bénéfice n'est pas tout de suite intuitif.

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 752
    Points : 5 457
    Points
    5 457
    Par défaut
    L'outil qui t'aide a créé ta vue n'est pas lié à Entity Framework.
    C'est Visual Studio qui te le propose parce que tu as créé un projet MVC.

    EF et MVC ne sont pas liés.
    MVC est pattern utilisé pour faciliter l'écriture d'une application Web.
    EF est un ORM utilisé pour faciliter les accès aux données.
    Les deux sont indépendants mais peuvent fonctionner ensembles.

    J'ajouterai, et d'ailleurs tu l'as mentionné, que la création de ta vue est lié à ton contrôleur, pas à ton modèle.
    Ce qui est logique puisque le contrôleur sert à gérer les actions que tu fais dans la vue en se basant ou non sur le modèle.
    Mais cette création automatique est basée sur un template générique qui génère un code tout aussi générique et qu'il te faut personnaliser.
    Donc, oui si tu as un composant, il faut remplacer le code généré pour utiliser ton composant.

    C'est dommage que tu ne trouves pas cela intuitif.
    Je vais donc te donner un exemple concret, par exemple un site de e-Commence comme celui de Darty ou la Fnac
    Tu vends donc toute sortes d'articles et parfois tu fait des opérations marketings dessus.
    Tu as donc un modèle qui représente un article avec notamment un prix, et (pour simplifier) un pourcentage de réduction à appliquer pendant les soldes.
    Cet article n'est pas vu de la même façon par un acheteur et par un administrateur.
    L'administrateur aura, par exemple, l'article dans une grille avec la possibilité de modifier le pourcentage de réduction.
    L'acheteur verra l'article dans une page plus UX/UI avec une image générée affichant le prix original de l'article barré et en rouge, et en vert le prix avec la réduction appliquée, et pourquoi pas le taux dans un petit cercle à coté.

    On a donc le même modèle avec les même données affichées de manière radicalement différentes par deux contrôleurs différents, et donc dans deux vues différentes, suivant si on est un administrateur ou un acheteur.

  5. #5
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 393
    Points : 2 711
    Points
    2 711
    Par défaut
    Je ne comprends pas par quel raisonnement tu arrives à la conclusion que c'est important que la génération totalement automatique de la vue soit effectuée par Entity Framework ou par Visual Studio.

    Ah c'est-à-dire qu'il faut que je regarde de plus près comment la liaison se fait entre le modèle et la vue, comment on utilise un composant de vue.

    ***
    Ah d'ailleurs ça risque de m'aider dans ce que je suis en train de faire. J'essaie de mettre la pagination sur un site MVC, le modèle contient un champ, et il paraît que la collection où il se trouve, non. C'est bizarre, ça.

    J'irai chercher l'intitulé du message d'erreur, ça risque d'être plus clair.

    Ah ben le voilà :
    Gravité Code Description Projet Fichier Ligne État de la suppression Détails
    Erreur CS1061 'IPagedList<Order>' ne contient pas de définition pour 'ShipVia' et aucune méthode d'extension accessible 'ShipVia' acceptant un premier argument de type 'IPagedList<Order>' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante*?) MVC01 C:\Projects Visual Studio\Web\MVC01\MVC01\Views\Orders\Index.cshtml 97 Actif
    Dans le code de Order :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        public int? ShipVia { get; set; }
    Mais c'est vrai que je n'en suis qu'à la première ligne des modifications, dans la vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @model PagedList.IPagedList<MVC01.Models.Order>
    using PagedList.mvc;
    Il y a d'autres modifications à faire après, mais j'avoue que j'ai été tellement troublé par ce message d'erreur que j'ai temporisé ...

    ***
    Ah, j'y suis : la vue paginée fait appel à une page, et c'est dans la page qu'on va trouver le champ.
    J'ai été trop pressé sur ce coup-là

  6. #6
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 752
    Points : 5 457
    Points
    5 457
    Par défaut
    Citation Envoyé par Gluups Voir le message
    Je ne comprends pas par quel raisonnement tu arrives à la conclusion que c'est important que la génération totalement automatique de la vue soit effectuée par Entity Framework ou par Visual Studio.
    Je n'ai jamais dit que cela avait une importance de savoir quel outil génère ta vue.
    J'ai simplement corrigé une affirmation erronée.

    Citation Envoyé par Gluups Voir le message
    Ah c'est-à-dire qu'il faut que je regarde de plus près comment la liaison se fait entre le modèle et la vue, comment on utilise un composant de vue.
    Pour ce qui est du lien entre modèle, vue et contrôleur, le principe est plutôt simple alors je te laisse juge sur ce que tu dois on non approfondir.
    Mais si tu dois utiliser un composants de vue, il serait effectivement préférable que tu te penches sur le sujet car ça rajoute une petite complexité.
    Le lien que je t'ai fourni devrait suffire mais rien ne t'empêche d'investiguer un peu plus.
    Ce qui est important dans mon message, c'est qu'il est préférable de confier les problématiques d'affichage aux éléments qui gèrent l'affichage.


    Citation Envoyé par Gluups Voir le message
    Ah d'ailleurs ça risque de m'aider dans ce que je suis en train de faire. J'essaie de mettre la pagination sur un site MVC, le modèle contient un champ, et il paraît que la collection où il se trouve, non. C'est bizarre, ça.

    J'irai chercher l'intitulé du message d'erreur, ça risque d'être plus clair.

    Ah ben le voilà :


    Dans le code de Order :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        public int? ShipVia { get; set; }
    Mais c'est vrai que je n'en suis qu'à la première ligne des modifications, dans la vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @model PagedList.IPagedList<MVC01.Models.Order>
    using PagedList.mvc;
    Il y a d'autres modifications à faire après, mais j'avoue que j'ai été tellement troublé par ce message d'erreur que j'ai temporisé ...

    ***
    Ah, j'y suis : la vue paginée fait appel à une page, et c'est dans la page qu'on va trouver le champ.
    J'ai été trop pressé sur ce coup-là
    Pour la pagination, je te suggère de regarder ici :
    https://learn.microsoft.com/fr-fr/as...vc-application

  7. #7
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 393
    Points : 2 711
    Points
    2 711
    Par défaut
    OK, puisqu'il est question de composant de vue il faudra que je revienne après avoir approfondi ça, et comme j'ai commencé avec la pagination MVC je serais probablement bien inspiré d'en terminer d'abord avec ça.

    C'est vrai que dire plus que ça ne fait qu'embrouiller le message.

  8. #8
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 393
    Points : 2 711
    Points
    2 711
    Par défaut
    Citation Envoyé par popo Voir le message
    Pour la pagination, je te suggère de regarder ici :
    https://learn.microsoft.com/fr-fr/as...vc-application
    En effet c'est bien avec ça que j'ai démarré.
    Je me rends compte que mon approche peut apparaître gribouille, puisque j'ai lancé l'exécution après avoir inséré deux lignes, ce qui n'était pas très raisonnable.

    Pour le tri j'ai pris la page précédente, que j'ai transposée puisque ma base Northwind contient des commandes (Orders). Impeccable.

    Pour la pagination, probablement c'est faisable aussi de transposer, mais il faut ... "rester assis sur sa chaise"

    Je ne me reconnais pas, j'ai eu une période où j'étais beaucoup plus patient et méthodique que ça.
    Je te fais grâce de ce que je vois passer quant à tout autre chose, où la question que je me pose est "mais comment ça se fait que je n'ai pas craqué ?"

Discussions similaires

  1. Réponses: 5
    Dernier message: 03/07/2015, 19h56
  2. [Débutant] Ajouter des attributs à une classe générée automatiquement par Entity
    Par Pelote2012 dans le forum Entity Framework
    Réponses: 2
    Dernier message: 20/11/2014, 16h07
  3. Introduction par l'exemple à Entity Framework 5 Code First
    Par Serge Tahé dans le forum Entity Framework
    Réponses: 25
    Dernier message: 07/08/2013, 13h45
  4. Réponses: 0
    Dernier message: 04/07/2012, 17h47
  5. alignement par css
    Par jlf dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 01/05/2006, 12h01

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