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 :

Public virtual Null


Sujet :

ASP.NET MVC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2008
    Messages
    279
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 279
    Par défaut Public virtual Null
    Bonjour,

    Lors d'un ajout, d'une modification ou suppression d'un utilisateur, le controller me remonte une erreur sur ma variable Droit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        public partial class Utilisateur
        {
            public int PKIdUtilisateur { get; set; }
            public string Nom { get; set; }
            public string Prenom { get; set; }
            public string Trigramme { get; set; }
            public string Identifiant { get; set; }
            public string Mot_de_passe { get; set; }
            public int FK_IdDroit { get; set; }
     
            public virtual Droit Droit { 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 partial class Droit
        {
            public Droit()
            {
                this.Utilisateur = new HashSet<Utilisateur>();
            }
     
            public int PKIdDroit { get; set; }
            public string Nom { get; set; }
            public int Niveau { get; set; }
            public virtual ICollection<Utilisateur> Utilisateur { get; set; }
        }
    Par exemple lors d'une modification d'un utilisateur je passe un objet utilisateur à la vue. Celui-ci comporte toutes les informations.

    En revanche lorsque je clique sur le bouton modifier de ma vue l'objet que me retourne la vue est rempli sauf mon objet Droit qui est null est le controller (ModelState) me remonte comme erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Échec de la conversion de paramètre du type «*System.String*» en type «*CULTE.Models.Droit*», car aucun convertisseur de type ne peut effectuer une conversion entre ces types
    Auriez vous un idée merci ?

  2. #2
    Membre chevronné Avatar de elbj
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Services à domicile

    Informations forums :
    Inscription : Novembre 2004
    Messages : 371
    Par défaut
    Bonjour

    Aurais-tu le code du contrôleur et de la vue ?

    Cdt

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2008
    Messages
    279
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 279
    Par défaut
    Vue :
    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
    @model CULTE.Models.Utilisateur
     
    @{
        ViewBag.Title = "Information utilisateur";
    }
     
    @using (Html.BeginForm())
    {
        @Html.AntiForgeryToken()
        @Html.ValidationSummary(true)
        <div class="row-fluid">
            <div class="span8 offset2">
                <div class="well">
     
                    <fieldset>
                        <legend>@ViewData["Message"]</legend>
                        @Html.HiddenFor(model => model.PKIdUtilisateur)
                        @Html.HiddenFor(model => model.FK_IdDroit)
                        @Html.HiddenFor(model => model.Droit)
                        <div class="control-group">
                            <div class="editor-label">
                                @Html.LabelFor(model => model.Nom)
                            </div>
                            <div class="editor-field">
                                @Html.EditorFor(model => model.Nom)
                                @Html.ValidationMessageFor(model => model.Nom)
                            </div>
                        </div>
     
                        <div class="control-group">
                            <div class="editor-label">
                                @Html.LabelFor(model => model.Prenom)
                            </div>
                            <div class="editor-field">
                                @Html.EditorFor(model => model.Prenom)
                                @Html.ValidationMessageFor(model => model.Prenom)
                            </div>
                        </div>
                        <div class="control-group">
                            <div class="editor-label">
                                @Html.LabelFor(model => model.Trigramme)
                            </div>
                            <div class="editor-field">
                                @Html.EditorFor(model => model.Trigramme)
                                @Html.ValidationMessageFor(model => model.Trigramme)
                            </div>
                        </div>
                        <div class="control-group">
                            <div class="editor-label">
                                @Html.LabelFor(model => model.Identifiant)
                            </div>
                            <div class="editor-field">
                                @Html.EditorFor(model => model.Identifiant)
                                @Html.ValidationMessageFor(model => model.Identifiant)
                            </div>
                        </div>
                        <div class="control-group">
                            <div class="editor-label">
                                @Html.LabelFor(model => model.Mot_de_passe)
                            </div>
                            <div class="editor-field">
                                @Html.EditorFor(model => model.Mot_de_passe)
                                @Html.ValidationMessageFor(model => model.Mot_de_passe)
                            </div>
                        </div>
                        <div class="control-group">
                            <div class="editor-label">
                                @Html.LabelFor(model => model.FK_IdDroit)
                            </div>
                            <div class="editor-label">
                                @Html.DropDownList("Droit")
                                @Html.ValidationMessageFor(model => model.FK_IdDroit)
                            </div>
                        </div>
                        @if(ViewData["btn"]=="Modifier")
                        {
                            <input class="btn btn-warning" type="submit" value="Enregistrer" />
                        }
                        else if(ViewData["btn"]=="Supprimer")
                        {
                            <input class="btn btn-warning" type="submit" value="Supprimer" /> 
                        }
                        else
                        { 
                            <input class="btn btn-warning" type="submit" value="Ajouter" />
                        }
                    </fieldset>
                </div>
            </div>
        </div>
    }
    Controller:
    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
    [ActionName("InformationUtilisateur")]
            [HttpPost]
            public ActionResult InformationUtilisateurPost(Utilisateur model, FormCollection collection)
            {
                try
                {
                    var errors = ModelState.Values.SelectMany(v => v.Errors);
                    if (ModelState.IsValid)
                    {
                        if (!repUtilisateur.GetUser(model))
                        {
                            repUtilisateur.CreateUser(model);
                            return RedirectToAction("Index", "Parametre");
                        }
                    }
                    else
     
                        // affichage de la vue error
                        PopulateDropDownListDroit();
                    return View();
                }
                catch (Exception)
                {
                    // affichage de la vue error
                    return View("Error");
                }
            }

  4. #4
    Membre chevronné Avatar de elbj
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Services à domicile

    Informations forums :
    Inscription : Novembre 2004
    Messages : 371
    Par défaut
    Eh bien ton @Html.HiddenFor(model => model.Droit) génère une chaîne de caractères postée avec le reste des données de formulaire. D'où ton erreur. Retire le HiddenFor.

    Plus généralement, mais cela n'engage que ma propre vision des choses, tu devrais avoir un modèle de données et un modèle de vue. Perso j'utilise entity framework avec un modèle généré à partir de la base et je n'envoie jamais d'entité à mes vues mais des modèles spécialement écrits pour celles-ci. C'est une façon de faire qui demande un chouia plus de développement mais qui me permet de mieux maîtriser les données qui transitent.

    Cdt

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2008
    Messages
    279
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 279
    Par défaut
    Nom : Sans titre.jpg
Affichages : 268
Taille : 97,9 Ko

    Toujours la même erreur merci pour ton retour

  6. #6
    Membre chevronné Avatar de elbj
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Services à domicile

    Informations forums :
    Inscription : Novembre 2004
    Messages : 371
    Par défaut
    Ok, regarde aussi du côté de @Html.DropDownList("Droit"). Ta dropdown list contient des composés de deux élements : une valeur et un texte d'affichage. En mettant "Droit" au nom de ta dropdownlist tu indique implicitement qu'il doit affecter la valeur sélectionnée (qui est un string) à la propriété Droit qui est de type Droit. Le nom de ta dropdown devrait être @Html.DropDownList("FK_IdDroit").

    Tu risques aussi de rencontrer un autre problème. Tu déclares un @Html.HiddenFor(model => model.FK_IdDroit) et un dropdown list destiné à modifier un droit en affectant FK_IdDroit. Il a y avoir un conflit.

    Cdt

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

Discussions similaires

  1. variable public nulle
    Par b.speedy dans le forum Débuter
    Réponses: 5
    Dernier message: 30/04/2012, 18h10
  2. Variable public nulle
    Par b.speedy dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 30/04/2012, 09h33
  3. [Excel] Publication d'une feuille au format .htm
    Par talumn dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/02/2009, 02h57
  4. "ALTERER" une col. NULL en NOT NULL - Int
    Par Gandalf24 dans le forum SQL
    Réponses: 2
    Dernier message: 28/12/2002, 00h07
  5. Abstract VS virtual
    Par LE CHAKAL dans le forum Langage
    Réponses: 2
    Dernier message: 29/08/2002, 17h50

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