2010-07-29 2 views
1

Lorsque j'appuie sur le bouton de soumission et que j'accède au contrôleur, mon ViewModel est vide. Je ne sais pas pourquoi cela se produit, j'ai un code similaire à celui-ci sur les autres points de vue et ils transmettent des données.ViewModel est vide MVC2

Contrôleur

 public ActionResult DeleteCategory(int id) 
     { 
      var data = _service.GetIndividualCategory(id); 
      if (data == null) return View("NotFound"); 

      // If attached to traders send to other view 
      var traders = _service.GetTradersAttachedToCategory(id); 
      if (!traders.Any()) 
      { 
       var category = new DeleteCategoryViewModel 
       { 
        Description = data.Description, 
        Id = data.Id 
       }; 

       return View(category); 
      } 

      var trader = new DisplayTradersAttachedToCategoryViewModel 
      { 
       Description = data.Description, 
       Id = data.Id, 
       BusinessName = traders.Select(x => new BusinessNameViewModel { BusinessName = x.BusinessName, Id = x.Id }), 
       Categories = _service.GetCategories(id).Select(x => new SelectListItem {Text = x.Description, Value = x.Id.ToString()}) 
      }; 

      return View("DeleteCategoryAttachedToTraders", trader); 
     } 

lorsque Accédé bouton 'Soumettre' a frappé

 [HttpPost] 
     public ActionResult DeleteCategoryFromTradersAttachNewCategory(DisplayTradersAttachedToCategoryViewModel displayTradersAttachedToCategoryViewModel) 
     { 
      if (displayTradersAttachedToCategoryViewModel.Button == "Back to List") return RedirectToAction("ViewCategories"); 

      //Update traders with new category 
      //delete category 

      //if (_service.DeleteCategory((int)deleteCategoryViewModel.Id)) 
      //{ 
      // return RedirectToAction("ViewCategories"); 
      //} 

      return View("DeleteCategoryAttachedToTraders", displayTradersAttachedToCategoryViewModel); 
     } 

DeleteCategoryAttachedToTraders.aspx

<%@ Page Title="Delete Category - Traders Attached to Category" Language="C#" MasterPageFile="~/Views/Shared/Master.Master" Inherits="System.Web.Mvc.ViewPage<Internal.ViewModels.Controller.DisplayTradersAttachedToCategoryViewModel>" %> 

<asp:Content ID="pageTitle" ContentPlaceHolderID="PageTitle" runat="server"> 
    Delete Category - Traders Attached to Category 
</asp:Content> 

<asp:Content ID="htmlHead" ContentPlaceHolderID="HtmlHead" runat="server"> 
    <link href="<%=ResolveUrl("~/Assets/Styles/CSS.css")%>" rel="Stylesheet" type="text/css" /> 
</asp:Content> 

<asp:Content ID="bodyContent" ContentPlaceHolderID="BodyContent" runat="server"> 
    <div class="center"><% 
    using (Html.BeginForm("DeleteCategoryFromTradersAttachNewCategory", "Controller",FormMethod.Post)) 
    {%>  
     <h2>Delete Category - Traders Attached to Category</h2> 
     <div class="magiPadBig"></div> 

     <div class="magiPadBig"></div>  
     <%=Html.DisplayFor(x => x.BusinessName)%> 

     <div class="magiPadBig"></div> 
     <h3>New Category</h3> 

     <div class="magiPadBig"></div>  
     <%=Html.DropDownList("Categories")%> 

     <div class="magiPadBig"> 
     <input type="submit" name="Button" value="Back to List" /> 
     <input type="submit" name="Button" value="Submit" /> 
     </div><% 
    }%> 
    </div> 
</asp:Content> 

DisplayTradersAttachedToCategoryViewModel

public class DisplayTradersAttachedToCategoryViewModel 
{ 
    public int Id { get; set; } 
    public string Description { get; set; } 

    [UIHint("BusinessNameDisplayTemplate")] 
    public IEnumerable<BusinessNameViewModel> BusinessName { get; set; } 

    public IEnumerable<SelectListItem> Categories { get; set; } 

    public int Category { get; set; } 

    public string Button { get; set; } 
} 

Merci à l'avance pour toute aide.

Clare

+0

Pouvez-vous poster la vue .. ensemble –

+0

Bonjour Martin, j'ai maintenant ajouté toute la vue – ClareBear

Répondre

1

Le problème que je peux voir (et j'attends d'autres pour me corriger) est le suivant: (modifié pour plus de clarté)

  1. Id ne sera pas réglé parce que vous êtes l'affichage dans un formulaire différent, et il n'y a pas de champ caché pour l'identifiant, donc il ne sera pas défini.
  2. La description ne sera pas définie, car il n'y a rien à configurer.
  3. Les catégories ne seront pas définies, parce que le Ienumerable est peuplé seulement dans votre get, et pas votre poste (ce qui est juste, car vous ne publiez pas toute la liste).
  4. La catégorie n'est pas renseignée car vous avez nommé la liste déroulante "Catégories" et ne correspondra donc pas au nom "Catégorie" dans le modèle de vue.

Essayez

<%=Html.DropDownList("Category", Model.Categories)%>