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 :

Only one 'model' statement is allowed in a file


Sujet :

ASP.NET MVC

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Octobre 2010
    Messages : 163
    Par défaut Only one 'model' statement is allowed in a file
    Salut

    Quand j'essaie d'ajouter une déclaration d'un deuxième modèle dans ma page .aspx j’obtiens l'erreur suivante:

    Only one 'model' statement is allowed in a file
    pouvez-vous m'aider!
    merci,
    pacifiquement.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par pacifiquement Voir le message
    Quand j'essaie d'ajouter une déclaration d'un deuxième modèle dans ma page .aspx j’obtiens l'erreur suivante:

    Only one 'model' statement is allowed in a file
    Bah le message est assez clair, non ? On ne peut pas déclarer plusieurs modèles dans la même page, c'est tout...
    La directive @model crée une vue fortement typée, pour un type de modèle donné : ça indique le type de la propriété Model. Or cette propriété ne peut pas avoir 2 types différents...

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2010
    Messages : 119
    Par défaut
    bonjour,
    Je suppose que tu parle de vu fortement typé. Si c'est le cas je pense que c'est normal parce que d'après moi on ne peut pas faire "hériter" une vue fortement typée de plusieurs modèle. Tu devrais créer un ModelView qui correspond aux différents champs dont tu as besoin dans ta vue et faire "hériter" ta vue de ce ModelView.
    PS: désolé je répète un peu ce que vient de dire Tomlev, je n'avais pas vu qu'il avait déjà répondu au post
    cordialement,

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Octobre 2010
    Messages : 163
    Par défaut
    Salut,

    mais si jamais j'ai plusieurs objets à utiliser et encore un IEnumerable comment peut-on y arriver !!

    merci.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par pacifiquement Voir le message
    mais si jamais j'ai plusieurs objets à utiliser et encore un IEnumerable comment peut-on y arriver !!
    Tu crées une classe modèle spécifique pour englober ces objets

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Octobre 2010
    Messages : 163
    Par défaut
    Salut

    je ne suis pas arrivée à le faire
    y a pas un exemple sur internet ?!

    merci.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par pacifiquement Voir le message
    je ne suis pas arrivée à le faire
    Pas arrivé à faire quoi ? A créer une classe ?! Si c'est ça il faudrait sérieusement penser à te replonger dans un cours de C#

    En gros, si tu as des objets X et Y (de types Titi et Toto) que tu veux utiliser comme modèles, tu crées une classe comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class MonModele
    {
        public Titi X { get; set; }
        public Toto Y { get; set; }
    }
    Pour le passer à la vue, tu fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return View(new MonModele { X = x, Y = y });
    Et dans la vue, tu mets MonModele comme modèle...

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Octobre 2010
    Messages : 163
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Pas arrivé à faire quoi ? A créer une classe ?! Si c'est ça il faudrait sérieusement penser à te replonger dans un cours de C#
    pas à ce point.
    sinon pour le reste c'est ce que j'ai fais pourtant ça ne marche pas.

    merci

  9. #9
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2010
    Messages : 119
    Par défaut
    Plus de détail avec du code pourrait aider à savoir pourquoi ça ne marche pas. Parce que la je suis en formation pour passer mon brevet de sorcellerie mais j'ai pas encore appris à lire dans une boule de cristal
    cordialement

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Octobre 2010
    Messages : 163
    Par défaut
    y a pas un exemple sur internet comme ça je peux le suivre et savoir où je me trompe !

  11. #11
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2010
    Messages : 119
    Par défaut
    Va voir de ce coté la: http://weblogs.asp.net/scottgu/archi...alidation.aspx
    Le post inclut la notion de validation mais c'est juste un plus
    cordialement

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par pacifiquement Voir le message
    y a pas un exemple sur internet comme ça je peux le suivre et savoir où je me trompe !
    Mais c'est vraiment si compliqué que ça de poster ce que tu as fait ? Ce serait quand même nettement plus simple que de trouver un exemple qui correspond peut-être, ou peut-être pas, à ce que tu veux...

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Octobre 2010
    Messages : 163
    Par défaut
    merci ! mais en fait ce que je veux c'est utiliser plusieurs modèles dans la même vue même

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par pacifiquement Voir le message
    merci ! mais en fait ce que je veux c'est utiliser plusieurs modèles dans la même vue même
    Encore une fois : ce n'est pas possible
    Il faut créer un modèle unique qui regroupe tous ceux que tu veux utiliser dans la vue

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Octobre 2010
    Messages : 163
    Par défaut
    en fait j'ai créé une classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    namespace MVC3ApplicationPersonneAdresses.Models
    {
        public class RechercheEtudiant 
        {
            public Activite Activites { get; set; }
            public IEnumerable<Etudiant> Etudiants { get; set; }
        }
    }
    puis dans ma vue j'ai ajouté la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @model MVC3ApplicationPersonneAdresses.Models.RechercheEtudiant
    et dans mon controlleur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     public ViewResult Index(string recherche)
            {
                var etudiants = db.Etudiants.Include(e => e.Niveau);
                if (!String.IsNullOrEmpty(recherche))
                {
                    etudiants = etudiants.Where(e => e.Nom.ToUpper().Contains(recherche.ToUpper()));
                }
                return View(etudiants.ToList());
            }
    cette action ne contient pas le deuxième objet puisque même au niveaux Vue ça ne marche pas.


    Merci

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Octobre 2010
    Messages : 163
    Par défaut
    ma page index contient le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    @using (Html.BeginForm())
    {
       <div>
            Recherche par Nom ou Prénom: @Html.TextBox("recherche")
             <div class="editor-label">
                @Html.LabelFor(model => model.NiveauID, "Niveau")
            </div>
            <div class="editor-field">
                @Html.DropDownList("NiveauID", String.Empty)
                @Html.ValidationMessageFor(model => model.NiveauID)
            </div>
            <input type="submit" value="Rechercher" />
      </div>
    }
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    <table class="tablesorter">
    <thead>
        <tr>
            <th class="thcursseur">
                Nom
            </th>
            <th class="thcursseur">
                Prenom
            </th>
            <th class="thcursseur">
                Niveau
            </th>
            <th class="thcursseur">
                Liste activités
            </th>
        </tr>
    </thead>
    <tbody>
    @foreach (var item in Model)
    {
        <tr>
            <td class="clwidthtd">
                @Html.ActionLink("Editer", "Edit", new { id = item.EtudiantID }) |
                @Html.ActionLink("Spprimer", "Delete", new { id = item.EtudiantID }) |
                @Html.DisplayFor(modelItem => item.Nom)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Prenom)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Niveau.Libelle)
            </td>
            <td>
                @{
           foreach (var activite in item.Activites)
           {
                        @activite.Libelle <br />
           }
                }
            </td>
        </tr>
    }
    </tbody>
    </table>
    mes classes sont: Activite, Etudiant, Niveau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     public class Activite
        {
            public int ActiviteID { get; set; }
            [Required(ErrorMessage = "Veuillez saisir l'ctivité de l'étudiant")]
            [Display(Name = "Activité de l'étudiant")]
            [MaxLength(50)]
            public string Libelle { get; set; }
            public virtual ICollection<Etudiant> Etudiants { get; set; }
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     public class Etudiant
        {
            public int EtudiantID { get; set; }
            [Required(ErrorMessage = "Veuillez saisir le nom de l'étudiant")]
            public string Nom { get; set; }
            [Required(ErrorMessage = "Veuillez saisir le prénom de l'étudiant")]
            public string Prenom { get; set; }
            [Required(ErrorMessage = "Veuillez selectionnez le niveau d'étude")]
            public int NiveauID { get; set; }
            public virtual Niveau Niveau { get; set; }
            public virtual ICollection<Activite> Activites { get; set; }
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     public class Niveau
        {
            public int NiveauID { get; set; }
            public string Libelle { get; set; }
            public virtual ICollection<Etudiant> Etudiants { get; set; }
        }

  17. #17
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par pacifiquement Voir le message
    cette action ne contient pas le deuxième objet puisque même au niveaux Vue ça ne marche pas.
    Je ne comprends pas très bien le sens de ta phrase... Ta vue attend un objet de type RechercheEtudiant, mais tu lui passes une liste d'étudiants, donc forcément ça ne peut pas marcher...

    Tu veux afficher quoi au juste sur ta vue ? Une liste d'étudiants, avec des filtres par niveau et par nom ?

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Octobre 2010
    Messages : 163
    Par défaut
    Salut,
    en fait si j'enlève cette partie de la vue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <div class="editor-label">
                @Html.LabelFor(model => model.NiveauID, "Niveau")
            </div>
            <div class="editor-field">
                @Html.DropDownList("NiveauID", String.Empty)
                @Html.ValidationMessageFor(model => model.NiveauID)
            </div>
    et que je fais appelle seulement à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @model IEnumerable<MVC3ApplicationPersonneAdresses.Models.Etudiant>
    ceci marche et ça donne la liste des étudiants avec une petite recherche par nom.
    sinon ce que je veux c'est intégrer une recherche multicritère et là je dois utiliser d'autres objets et c'est là où je me bloque.

    Merci,
    pacifiquement.

  19. #19
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    OK... revenons un peu en arrière.

    En fait, il me semble que les critères de recherche ne font pas vraiment partie du modèle. Ce sont juste des paramètres que tu vas passer à ton contrôleur pour savoir quoi chercher. Donc a priori tu n'as pas besoin de les mettre dans le modèle, c'est juste des paramètres de ton action de contrôleur, non ?

    Bon, je dis ça, je ne suis pas un expert de MVC, loin de là, donc c'est peut-être une bêtise...

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Octobre 2010
    Messages : 163
    Par défaut
    Salut,
    en fait dans mon cas je dois charger les critères de recherche de la base de données, car si jamais j'ajoute des données dans la BD je n'aurai pas besoin de les ajouter manuellement au niveau du volet recherche dans la vue.

    Merci.

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

Discussions similaires

  1. Réponses: 20
    Dernier message: 24/06/2011, 23h22
  2. Réponses: 1
    Dernier message: 04/04/2011, 23h16
  3. Réponses: 6
    Dernier message: 17/03/2011, 23h27
  4. Réponses: 2
    Dernier message: 04/02/2009, 13h24
  5. [VB.NET] Error: There can be only one 'page' directive
    Par Redouane dans le forum ASP.NET
    Réponses: 2
    Dernier message: 24/11/2004, 19h16

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