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 Discussion :

Asp.Net MVC : Mon Formulaire ne renvoie pas mes données.


Sujet :

ASP.NET

  1. #1
    Membre habitué Avatar de DeVaK
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2013
    Messages : 45
    Points : 140
    Points
    140
    Par défaut Asp.Net MVC : Mon Formulaire ne renvoie pas mes données.
    Bonjour,

    J'ai créé un Controller et ses vues fortement typé (Create, Details, Index) à partir d'objet créé par Entity Framework comme je l'ai fais des dizaines de fois.

    Seulement cette fois, mon formulaire Create ne me renvois pas mon objet, et j'obtiens un null décevant. J'ai vérifié avec un autre Controller et une autre vue Create de mon projet qui marche parfaitement et je ne vois pas la moindre différence.

    Voici le 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
    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
     
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.Entity;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using SiteFoncierOperation.Models.FoncierOperationDB;
     
    namespace SiteFoncierOperation.Controllers
    {
        public class CritereController : BaseController
        {
            //
            // GET: /Critere/
     
            public ActionResult Index()
            {
                var critere = dbFO.Critere.Include("GroupeTravaux");
                return View(critere.ToList());
            }
     
            //
            // GET: /Critere/Details/5
     
            public ActionResult Details(int id = 0)
            {
                Critere critere = dbFO.Critere.Single(c => c.idCritere == id);
                if (critere == null)
                {
                    return HttpNotFound();
                }
                return View(critere);
            }
     
            //
            // GET: /Critere/Create
     
            public ActionResult Create()
            {
                ViewBag.idGroupeTravaux = new SelectList(dbFO.GroupeTravaux, "idGroupeTravaux", "libelleGroupeTravaux");
                return View();
            }
     
            //
            // POST: /Critere/Create
     
            [HttpPost]
            public ActionResult Create(Critere critere)
            {
                if (ModelState.IsValid)
                {
                    dbFO.Critere.AddObject(critere);
                    dbFO.SaveChanges();
                    return RedirectToAction("Index");
                }
     
                ViewBag.idGroupeTravaux = new SelectList(dbFO.GroupeTravaux, "idGroupeTravaux", "libelleGroupeTravaux", critere.idGroupeTravaux);
                return View(critere);
            }
        [...]
    La 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
     
    @model SiteFoncierOperation.Models.FoncierOperationDB.Critere
     
    @{
        ViewBag.Title = "Create";
    }
     
    <h2>Create</h2>
     
    @using (Html.BeginForm()) {
        @Html.ValidationSummary(true)
     
        <fieldset>
            <legend>Critere</legend>
     
            <div class="editor-label">
                @Html.LabelFor(model => model.estVisible)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.estVisible)
                @Html.ValidationMessageFor(model => model.estVisible)
            </div>
     
            <div class="editor-label">
                @Html.LabelFor(model => model.critere)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.critere)
                @Html.ValidationMessageFor(model => model.critere)
            </div>
     
            <div class="editor-label">
                @Html.LabelFor(model => model.commentaire)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.commentaire)
                @Html.ValidationMessageFor(model => model.commentaire)
            </div>
     
            <div class="editor-label">
                @Html.LabelFor(model => model.idGroupeTravaux, "GroupeTravaux")
            </div>
            <div class="editor-field">
                @Html.DropDownList("idGroupeTravaux", String.Empty)
                @Html.ValidationMessageFor(model => model.idGroupeTravaux)
            </div>
     
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>
    }
     
    <div>
        @Html.ActionLink("Back to List", "Index")
    </div>
     
    @section Scripts {
        @Scripts.Render("~/bundles/jqueryval")
    }
    L'objet Critere :

    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
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.ComponentModel.DataAnnotations;
     
    namespace SiteFoncierOperation.Models.FoncierOperationDB
    {
        [MetadataType(typeof(CritereMetaData))]
        public partial class Critere
        {
        }
     
        public class CritereMetaData
        {
            public int idCritere { get; set; }
            public bool estVisible { get; set; }
            public string critere { get; set; }
            public string commentaire { get; set; }
            public int idGroupeTravaux { get; set; }
        }
    }
    Forcément je me prend un NullPointerException quand j'essaye de récupérer les Groupes de travaux au retour de mon formulaire Create, à la ligne 59 de mon Controller. Vu que la variable "critere" est à null.

    Donc si vous aviez des pistes à me proposer, j'en serai ravi!

    Merci ^^.

  2. #2
    Membre habitué Avatar de DeVaK
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2013
    Messages : 45
    Points : 140
    Points
    140
    Par défaut
    Trouvé!

    Donc en fait comme vous pouvez le voir, ma classe Critere possède un attribut critere.

    Lors du binding de la vue Create avec le controlleur, le binding par défaut cherche un préfixe aux champs du même nom que la classe.

    Donc la il considère que mon attribut critere est un préfixe et pas un attribut, et donc il passe à un autre mode et couic : null.

    J'ai renommer critere en leCritere et ca fonctionne nickel.

    Voici la source qui m'a permis de comprendre le problème :

    http://forums.asp.net/t/1498700.aspx...stom+ViewModel


    Et un autre lien dans lequel est expliqué plus correctement ce binding et le fonctionnement des préfixes :

    http://msdn.microsoft.com/fr-fr/magazine/hh781022.aspx

  3. #3
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Points : 1 056
    Points
    1 056
    Par défaut
    Merci pour ton auto-aide !
    Je pense que cela sera utile pour d'autre personnes

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

Discussions similaires

  1. [Débutant] Mon ComboBox n'affiche pas mes données
    Par P_Mercier dans le forum VB.NET
    Réponses: 2
    Dernier message: 17/05/2013, 14h40
  2. [ASP.NET MVC 3] Le ValidationSummary ne s'affiche pas
    Par Skalp dans le forum ASP.NET MVC
    Réponses: 8
    Dernier message: 28/03/2011, 18h41
  3. Mon webservice ne renvoie pas de données
    Par philippe69 dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 15/10/2009, 16h16
  4. Réponses: 0
    Dernier message: 20/09/2009, 20h34
  5. asp.net mvc Formulaire
    Par mourbare dans le forum ASP.NET
    Réponses: 0
    Dernier message: 10/08/2009, 15h01

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