ViewModel является пустой MVC2 - PullRequest
1 голос
/ 29 июля 2010

Когда я нажимаю кнопку отправки и получаю доступ к контроллеру, моя ViewModel становится пустой.Я не знаю, почему это происходит, у меня есть код, подобный этому на других представлениях, и они действительно передают данные.

Контроллер

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

Заранее спасибо за любую помощь.

Клэр

1 Ответ

1 голос
/ 29 июля 2010

Проблема, которую я вижу (и я полностью ожидаю, что другие исправят меня здесь), заключается в следующем: (отредактировано для ясности)

  1. Идентификатор не будет установлен, поскольку вы публикуете на другомформы, и для идентификатора нет скрытого поля, поэтому оно не будет задано.
  2. Описание не будет задано, так как для него нет ничего, что можно было бы установить.
  3. Категории не будут заданы, потому что Ienumerable заполняется только в вашей записи, а не в вашем сообщении (что достаточно справедливо, поскольку вы не публикуете весь список).
  4. Категория не заполняется, потому чтоВы назвали выпадающий список "Категории", и поэтому он не будет совпадать с именем "Категория" в модели представления.

Попробуйте

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