2010-07-29 40 views
1

當我按下提交按鈕並訪問控制器時,我的ViewModel是空的。我不知道爲什麼會發生這種情況,我在其他視圖上也有類似的代碼,他們通過數據傳遞。ViewModel爲空MVC2

控制器

 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); 
     } 

訪問時, '提交' 按鈕打

 [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; } 
} 

預先感謝任何幫助。

克萊爾

+0

你能後的全貌.. – 2010-07-29 11:19:25

+0

你好馬丁,我現在已經增加了整體視圖 – ClareBear 2010-07-29 12:46:17

回答

1

我可以看到(我完全相信別人在這裏指正)的問題如下: (編輯爲清楚起見)

  1. 的ID將不能設置,因爲你是發佈到不同的表單,並且ID沒有隱藏字段,所以它不會被設置。
  2. 說明不會被設置,因爲它沒有任何設置。
  3. 類別不會被設置,因爲Ienumerable只填充在你的get中,而不填充你的文章(這是公平的,因爲你沒有發佈整個列表)。
  4. 類別未填充,因爲您已將下拉列表命名爲「類別」,因此它與視圖模型中的名稱「類別」不匹配。

嘗試

<%=Html.DropDownList("Category", Model.Categories)%> 
相關問題