2010-12-07 9 views
0

J'ai un site ASP.NET MVC 3 simple, depuis mon contrôleur hors de l'action d'édition Je passe un objet (une classe qui est également mappée par nhibernate)Conserver les données d'objet après les avoir transmises à une vue fortement typée

Après avoir édité et cliqué sur enregistrer, je le passe à la méthode [HTTPPost] decoraded mais toutes les propriétés sont correctes, extrait la propriété "id" avec une valeur de guid équivalente à NULL (00000000-0000-000 ...).

Le modèle de domaine présente-t-il un problème pour taper fortement mes vues? le problème peut être qu'ID a:

{get; private set;}

???

Merci d'avance.

Voici le code:

Mon Vue:

'@model fnh.DataModel.Kunde 

@{ 
    View.Title = "EditKunde"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<h2>EditKunde</h2> 

@using (Html.BeginForm()) { 
    @Html.ValidationSummary(true) 
    <fieldset> 
     <legend>Fields</legend> 
     @Html.EditorFor(model => model._id) 
     @Html.EditorFor(model => model._KdNr); 

     <div class="editor-label"> 
      @Html.LabelFor(model => model._Name) 
    `enter code here`  </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model._Name) 
      @Html.ValidationMessageFor(model => model._Name) 
     </div> 

     <p> 
      <input type="submit" value="Save" /> 
     </p> 
    </fieldset> 
} 

<div> 
    @Html.ActionLink("Back to List", "Index") 

'

Mon contrôleur Actions:

' public ActionResult EditKunde (id Guid) { retour View (_kunden .GetKundeById (id)); }

[HttpPost] 
    public ActionResult EditKunde(Kunde kunde) 
    { 
     Ansprechpartner anp = new Ansprechpartner(); 
     anp._Name = "JustATry"; 
     kunde._Ansprechpartner.Add(anp); 
    `enter code here` _kunden.EditKunde(kunde); 
     return View(); 
    }' 

Répondre

0

Ajoutez-vous la propriété Id à votre formulaire (peut-être comme un champ hidden)?

Il serait utile que vous posiez le code Action (pour les deux actions d'édition) et la vue.

+0

Merci pour votre réponse, j'ai juste ajouté mon code ... – john84

+1

Il semble que le DefaultModelBinder ne se lie pas à une propriété dont l'accesseur est privé ou protégé. Essayez de le changer pour '{get; ensemble;} '. Quelqu'un peut-il confirmer cela? – CGK

+0

Oui c'est ça ... mais il devrait y avoir une solution, ou devrais-je "dupliquer" mon domaine et envelopper les données dans un propre ViewModel (ce qui semblerait être du code en double) ??? Une idée ou un conseil? – john84

Questions connexes