2010-11-24 8 views
0

J'ai un ViewModel (StoreViewModel). Quand je reçois valeur VM de View au contrôleur (Post), une valeur est nulle, seule une valeur qui est affichée sur View est non nulvaleur null dans ViewModel

plz help me

public class StoreViewModel 
    { 
     public StoreViewModel() { } 
     public Store Store { get; set; } 
     public List<Member> Members { get; set; } 
     public List<Order> Orders { get; set; } 
     public List<AccountPayable> AccountsPayable { get; set; } 
    } 

Voici mon avis

<% using(Html.BeginForm()) {%> 
    <div><%: Html.TextBoxFor(model => model.Store.Name) %></div> 
    <div><%: Html.TextBoxFor(model => model.Store.State) %></div> 
    <div><input type="submit" value="Submit" /></div> 
    <% } %> 

Je mets [HiddenInput (DisplayValue = false)] sur des colonnes dans l'entité Store, membre de l'Ordre, AccountPayable

+++

Voici mon contrôleur. (J'ai essayé utiliser FormCollection pour obtenir la valeur de vue, mais ... échec)

[HttpPost] 
     public ActionResult Details(Finger finger, StoreViewModel storeVM) 
     { 
      //if (finger.roleName != "Administrator") 
      // return RedirectToAction("DisplayNotice", "Notice"); 
      storeVM.Store.Active = (CheckBoxHelpers.GetValue(storeVM.Store.Active)).ToString(); 
      if (ModelState.IsValid) 
      {    
       storesRep.SaveStore(storeVM.Store, true); 
      } 
      else 
      { 
       return View(storeVM); 
      } 

      return RedirectToAction("List", "Stores"); 
     } 
+0

Pourriez-vous nous montrer votre code de contrôleur aussi? – ZippyV

Répondre

1

Vous devez vous assurer que la valeur est effectivement présente dans la requête POST. Le fait que vous obtenez null est une forte indication que ce n'est pas le cas. Vous pouvez utiliser FireBug pour voir exactement quelles valeurs sont publiées sur le serveur.

aussi de ce que je peux voir votre formulaire contient uniquement le nom du magasin et les champs de texte Etat si ce sont les seules valeurs que vous pouvez vous attendre à revenir dans votre action POST:

<% using(Html.BeginForm()) {%> 
    <div><%: Html.TextBoxFor(model => model.Store.Name) %></div> 
    <div><%: Html.TextBoxFor(model => model.Store.State) %></div> 
    <div><input type="submit" value="Submit" /></div> 
<% } %> 

Vous pourriez avoir besoin d'inclure la d'autres aussi. Vous pouvez utiliser des champs cachés pour envoyer les valeurs dont vous avez besoin.

Dans votre action du contrôleur que vous essayez de lire le champ storeVM.Store.Active inclure si dans votre formulaire:

<%: Html.HiddenFieldFor(model => model.Store.Active) %>