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 :

Utilisateur IENumerable dans la vue MVC 4 Razor


Sujet :

ASP.NET MVC

  1. #1
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    279
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 279
    Points : 71
    Points
    71
    Par défaut Utilisateur IENumerable dans la vue MVC 4 Razor
    Bonjour,

    Après plusieurs heures de recherche sur le net, je me trouve bloqué.

    En effet sur ma view(Recherche utilisateur) il y a quelques champs de saisie et un tableau de résultat.

    Pour pouvoir garder les données de la view au controler j'ai créé une classe(RechercheUtilisateur) qui comporte :
    - Objet Utilisateur (Nom, prenom,...) Récupération des données de recherche
    - IEnumerable Utilisateur (Nom, prénom, ....) Récupération des utilisateurs dans la base de données pour les afficher.


    Dans ma vue, je fais passer sur chaque champ la commande ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @model CULTE.Models.RechercheUtilisateurModel
    @Html.EditorFor(Model => Model.objUtilisateur.Nom)
    @Html.EditorFor(Model => Model.objUtilisateur.Prenom)
    .....
    Ensuite pour lister mes utilisateurs que j'ai trouvé par rapport à la recherche je souhaite passer dans ma vue partielle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @Html.Partial("_Utilisateur", Model.IEUtilisateur)
    et là j'ai l'erreur suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur	1	Conflit entre 'Model' et la déclaration 'System.Web.Mvc.WebViewPage<TModel>.Model'	c:\Users\.....\Desktop\CULTE\CULTE\Views\Parametre\RechercheUtilisateur.cshtml	92	49	CULTE
    Auriez vous une idée.

    Merci

  2. #2
    Membre éprouvé
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Points : 924
    Points
    924
    Par défaut
    Bonjour,
    Une seul vue nommée "_Utilisateur" ?
    Le Model attendu par la vue "_Utilisateur" est bien "@ModelType IEnumerable<Utilisateur>" ?
    Les namespaces utilisés dans les vues sont bien référencés dans le fichier de config ?

  3. #3
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    279
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 279
    Points : 71
    Points
    71
    Par défaut
    Vue recherche :
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    @model CULTE.Models.RechercheUtilisateurModel
    @{
        ViewBag.Title = "Recherche d'un utilisateur";
    }
     
    @using (Html.BeginForm("Action", "Parametre"))
    {    @Html.AntiForgeryToken()
        @Html.ValidationSummary(true)
     
        <div class="well">
            <fieldset>
                <h4>Critères de recherche</h4>
                <legend></legend>
            </fieldset>
            <div class="row-fluid">
                <div class="span4">
                    <div class="control-group">
                        <span class="editor-label span4" style="float:left">
                            @Html.LabelFor(Model => Model.objUtilisateur.Nom)
                        </span>
                        <span class="editor-field span8" style="position:relative">
                            @Html.EditorFor(Model => Model.objUtilisateur.Nom)
                            @Html.ValidationMessageFor(Model => Model.objUtilisateur.Nom)
                        </span>
                    </div>
                    <div class="control-group">
                        <span class="editor-label span4" style="float:left">
                            @Html.LabelFor(model => model.objUtilisateur.Prenom)
                        </span>
                        <span class="editor-field span8" style="position:relative">
                            @Html.EditorFor(model => model.objUtilisateur.Prenom)
                            @Html.ValidationMessageFor(model => model.objUtilisateur.Prenom)
                        </span>
                    </div>
                </div>
                <div class="span4">
                    <div class="control-group">
                        <span class="editor-label span4" style="float:left">
                            @Html.LabelFor(model => model.objUtilisateur.Trigramme)
                        </span>
                        <span class="editor-field span8" style="position:relative">
                            @Html.EditorFor(model => model.objUtilisateur.Trigramme)
                            @Html.ValidationMessageFor(model => model.objUtilisateur.Trigramme)
                        </span>
                    </div>
                    <div class="control-group">
                        <span class="editor-label span4" style="float:left">
                            @Html.LabelFor(model => model.objUtilisateur.Identifiant)
                        </span>
                        <span class="editor-field span8" style="position:relative">
                            @Html.EditorFor(model => model.objUtilisateur.Identifiant)
                            @Html.ValidationMessageFor(model => model.objUtilisateur.Identifiant)
                        </span>
                    </div>
                </div>
                <div class="span4">
                    <div class="control-group">
                        @*<span class="editor-label span4" style="float: left">
                                @Html.Label("Rôle : ")
                            </span>
                            <span class="editor-field span8" style="position:relative; ">
                                @Html.DropDownList("UPR", new List<SelectListItem>
                             {
                                new SelectListItem{ Text="Valeur1", Value = "Horizontal" },
                                new SelectListItem{ Text="Valeur2", Value = "Vertical" } })
                                @* @Html.ValidationMessageFor(model => model.Libelle)
                            </span>*@
                    </div>
                </div>
            </div>
            <div class="row-fluid">
                <fieldset>
                    <div class="span2 offset3">
                        <input type="submit" value="Annuler" name="btnAnnuler" style="width:160px" class="btn btn-warning" />
                    </div>
                    <div class="span2">
                        <input type="submit" value="Réinitialiser" name="btnReinitialiser" style="width:160px" class="btn btn-warning" />
                    </div>
                    <div class="span2">
                        <input type="submit" value="Rechercher" name="btnRecherche" style="width:160px" class="btn btn-warning" />
                    </div>
                </fieldset>
            </div>
     
        </div>
     
        <div class="well">
            <div class="row-fluid">
                <div class="span12">
     
                    <fieldset>
                      @Html.Partial("_Utilisateur", Model.IEUtilisateur) 
                    </fieldset>
     
                </div>
            </div>
        </div>
    }

    Vue partielle :
    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
    45
    46
    47
    48
    49
    50
    51
    52
    @model IEnumerable<CULTE.Models.Utilisateur>
    @using (Html.BeginForm())
    {
        @Html.ValidationSummary(true)
        <table class="table table-condensed">
            <tr>
                <th>
                    Nom
                </th>
                <th>
                    Prénom
                </th>
                <th>
                    Trigramme
                </th>
                <th>
                    Identifiant
                </th>
                <th>
                    Modifier
                </th>
                <th>
                    Supprimer
                </th>
            </tr>
            @foreach (var Items in Model)
            {
     
                <tr>
                    @Html.HiddenFor(m => Items.PKIdUtilisateur)
                    <td>
                        @Html.DisplayFor(m => Items.Nom)
                    </td>
                    <td>
                        @Html.DisplayFor(m => Items.Prenom)
                    </td>
                    <td>
                        @Html.DisplayFor(m => Items.Identifiant)
                    </td>
                    <td>
                        @Html.DisplayFor(m => Items.Trigramme)
                    </td>
                    <td>
                        @Html.ActionLink("Modifier", "Edit", new { id = Items.PKIdUtilisateur })
                    </td>
                    <td>
                        @Html.ActionLink("Supprimer", "Delete", new { id = Items.PKIdUtilisateur })
                    </td>
                </tr>
            }
        </table>
    }
    Classe Utilisateur :
    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
    namespace CULTE.Models
    {
        using System;
        using System.Collections.Generic;
        using System.ComponentModel.DataAnnotations;
     
        public partial class Utilisateur
        {
            public int PKIdUtilisateur { get; set; }
     
            [Required(ErrorMessage = "Nom obligatoire")]
            [Display(Name = "Nom :")]
            public string Nom { get; set; }
     
            [Required(ErrorMessage = "Prénom obligatoire")]
            [Display(Name = "Prénom :")]
            public string Prenom { get; set; }
     
            [Required(ErrorMessage = "Trigramme obligatoire")]
            [Display(Name = "Trigramme :")]
            [MaxLength(3, ErrorMessage = "La saisie du Trigramme ne doit pas excéder 3 caractères.")]
            public string Trigramme { get; set; }
     
            [Required(ErrorMessage = "Identifiant obligatoire")]
            [Display(Name = "Nom d'utilisateur :")]
            public string Identifiant { get; set; }
     
            [Required(ErrorMessage = "Mot de passe obligatoire")]
            [Display(Name = "Mot de passe :")]
            public string Mot_de_passe { get; set; }
     
            [Display(Name = "Droit :")]
            public int FK_IdDroit { get; set; }
     
            [Required(ErrorMessage = "Droit utilisateur obligatoire")]
            [Display(Name = "Droit :")]
            public virtual Droit Droit { get; set; }
        }
    }
    Classe RechercheUtilisateur :
    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
    namespace CULTE.Models
    {
        public class RechercheUtilisateurModel
        {
            public IEnumerable<Utilisateur> IEUtilisateur { get; set; }
            public Utilisateur objUtilisateur { get; set; }
     
            public RechercheUtilisateurModel()
            {
     
            }
     
            //public RechercheUtilisateurModel(IEnumerable<Utilisateur> IEUtili, Utilisateur objUtili)
            //{
            //    IEUtilisateur = IEUtili;
            //    objUtilisateur = objUtili;
            //}
        }
    }
    Citation Envoyé par dkmix Voir le message
    Bonjour,
    Une seul vue nommée "_Utilisateur" ?
    Le Model attendu par la vue "_Utilisateur" est bien "@ModelType IEnumerable<Utilisateur>" ?
    Les namespaces utilisés dans les vues sont bien référencés dans le fichier de config ?
    1) Oui
    2) Oui
    3) ? Normalement oui, mais le problème est identique sur je voulais utiliser directement un foreach

  4. #4
    Membre éprouvé
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Points : 924
    Points
    924
    Par défaut
    Il y a un Html.BeginForm dans la vue partielle qui ne devrait pas être là
    Ce qui fait un <form> dans un <form>, ce n'est pas possible.

    En relisant l'erreur, j'ai l'impression qu'il y a un conflit avec le mot clefs "Model".
    il faut éviter d'utiliser "Model" dans les expression lambda et remplacer @Html.LabelFor(Model => Model.objUtilisateur.Nom) par @Html.LabelFor(m => m.objUtilisateur.Nom)

  5. #5
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    279
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 279
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par dkmix Voir le message
    Il y a un Html.BeginForm dans la vue partielle qui ne devrait pas être là
    Ce qui fait un <form> dans un <form>, ce n'est pas possible.

    En relisant l'erreur, j'ai l'impression qu'il y a un conflit avec le mot clefs "Model".
    il faut éviter d'utiliser "Model" dans les expression lambda et remplacer @Html.LabelFor(Model => Model.objUtilisateur.Nom) par @Html.LabelFor(m => m.objUtilisateur.Nom)
    Merci je pense que j'ai avancé maintenant je l'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     L'élément de modèle passé dans le dictionnaire est de type « CULTE.Models.RechercheUtilisateurModel », mais ce dictionnaire requiert un élément de modèle de type « System.Collections.Generic.IEnumerable`1[CULTE.Models.Utilisateur] ».
    Pourtant c'est exactement c'est que j'ai fait !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        public class RechercheUtilisateurModel
        {
            public IEnumerable<Utilisateur> IEUtilisateur { get; set; }
            public Utilisateur objUtilisateur { get; set; }
    }
    La vue partielle IEnumerable<Utilisateur>

  6. #6
    Membre éprouvé
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Points : 924
    Points
    924
    Par défaut
    @Html.Partial("_Utilisateur", Model.IEUtilisateur) -> Model.IEUtilisateur != null ?

  7. #7
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    279
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 279
    Points : 71
    Points
    71
    Par défaut
    En plein action pour la résolution effectivement l'objet était bien null j'ai placé un if avant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                        @if (Model.IEUtilisateur != null)
                        {
                            @Html.Partial("_Utilisateur", Model.IEUtilisateur)
                        }
    Merci pour ton aide

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 19/04/2013, 23h35
  2. utilisation de ckeditor dans asp.net mvc avec razor
    Par thor76160 dans le forum ASP.NET MVC
    Réponses: 0
    Dernier message: 24/12/2011, 10h34
  3. Réponses: 13
    Dernier message: 03/03/2010, 23h30
  4. Réponses: 14
    Dernier message: 12/12/2009, 16h52
  5. [Conception] MVC - Déclarer l'écouteur d'evenement dans la vue.
    Par etiennegaloup dans le forum Général Java
    Réponses: 9
    Dernier message: 04/01/2006, 18h50

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