2011-04-13 4 views
1

Le problème:perte de données lors de l'utilisation sur le post EditorFor

Quand je soumets la forme que je suis en train de perdre toutes les informations saisies dans les modèles d'édition pour les adresses.

Je le modèle suivant:

public class MoveRecord 
{ 
    public Address StartPoint { get; set; } 
    public Address EndPoint { get; set; } 
} 

Où Adresse est définie comme:

public class Address 
{ 
    public String City { get; set;} 
    public String State { get; set; } 
    public String Line1{ get; set; } 
    public String PostalCode { get; set; } 
} 

Voici ma méthode d'action:

[HttpPost] 
public ActionResult Edit(MoveRecord model) 
{ 
    if (ModelState.IsValid) 
    { 
     //Save info 
    } 

    return View(model); 
} 

Mon point de vue de modifier utilise:

using (Html.BeginForm("Edit", "Move", FormMethod.Post)) 
{ 
    @Html.EditorFor(m => m.StartPoint); 
    @Html.EditorFor(m => m.EndPoint); 
    <input type="submit" value="Save" /> 
} 

Mon modèle d'édition est:

<table class="form address"> 
    <tbody> 
     <tr> 
      <th style="width: 200px;"> 
       @Html.LabelFor(m => m.Line1): 
      </th> 
      <td> 
       @Html.TextBoxFor(m => m.Line1, new { style = "width: 300px;" }) 
      </td> 
     </tr> 
     <tr id="zip"> 
      <th> 
       @Html.LabelFor(m => m.PostalCode): 
      </th> 
      <td> 
       @Html.TextBoxFor(m => m.PostalCode, new { style = "width: 150px;" }) 
      </td> 
     </tr> 
     <tr id="city"> 
      <th> 
       @Html.LabelFor(m => m.City): 
      </th> 
      <td> 
       @Html.TextBoxFor(m => m.City, new { style = "width: 150px;" }) 
      </td> 
     </tr> 
     <tr id="state"> 
      <th> 
       @Html.LabelFor(m => m.StateProvince): 
      </th> 
      <td> 
       @Html.TextBoxFor(m => m.StateProvince, new { style = "width: 150px;" }) 
      </td> 
     </tr> 
    </tbody> 
</table> 

Tout rend très bien, mais lorsque je soumets la forme du modèle que je reçois dans la méthode d'action ne contient pas d'informations entrées dans le champ d'adresse. Si je déplace tout dans la même vue, alors cela fonctionne très bien, mais ce que je voudrais, c'est pouvoir utiliser les modèles d'éditeur pour garder mes vues faciles à lire. Comment puis-je lier correctement les données du modèle de l'éditeur au modèle?

Edit: Posté ma méthode d'action

+0

À quoi ressemble la signature de votre méthode Action? –

+0

J'ai ajouté ma méthode d'action à ma question initiale –

Répondre

0

L'action que vous soumettez le formulaire doit ressembler à ceci:

[HttpPost] 
public ActionResult Edit(MoveRecord model) 
{ 
    // model.StartPoint and model.EndPoint should be correctly bound here. 
    ... 
} 

Ou si vous essayez de lier directement aux deux adresses vous devez définir le préfixe correct:

[HttpPost] 
public ActionResult Edit(
    [Bind(Prefix = "StartPoint")] Address start, 
    [Bind(Prefix = "EndPoint")] Address end 
) 
{ 
    ... 
} 
+0

Pourriez-vous préciser ce que vous entendez par la première réponse? Comment liez-vous correctement? – BlueChippy

Questions connexes