Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 2 ViewModel为空MVC2_Asp.net Mvc 2_Viewmodel - Fatal编程技术网

Asp.net mvc 2 ViewModel为空MVC2

Asp.net mvc 2 ViewModel为空MVC2,asp.net-mvc-2,viewmodel,Asp.net Mvc 2,Viewmodel,当我按下提交按钮并访问控制器时,我的ViewModel为空。我不知道为什么会发生这种情况,我在其他视图上有类似的代码,它们确实传递数据 控制器 public ActionResult DeleteCategory(int id) { var data = _service.GetIndividualCategory(id); if (data == null) return View("NotFound");

当我按下提交按钮并访问控制器时,我的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>  

删除类别-附加到类别的交易员
删除类别-附加到类别的交易员
x、 商业名称)%%>
新类别
DisplayTraderSattachedLocategoryViewModel

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; } 
}
公共类DisplayTraderSattachedLocategoryViewModel
{
公共int Id{get;set;}
公共字符串说明{get;set;}
[UIHint(“BusinessNameDisplayTemplate”)]
public IEnumerable BusinessName{get;set;}
公共IEnumerable类别{get;set;}
公共int类{get;set;}
公共字符串按钮{get;set;}
}
提前感谢您的帮助

克莱尔

我看到的问题(我完全希望其他人在这里纠正我)如下: (为清晰起见进行了编辑)

  • 不会设置Id,因为您正在发布到其他表单,并且Id没有隐藏字段,因此不会设置
  • 描述将不会被设置,因为没有可设置的内容
  • 不会设置类别,因为Ienumerable只在get中填充,而不是在post中填充(这很公平,因为您没有发布整个列表)
  • 类别未填充,因为您已将下拉列表命名为“类别”,因此它与viewmodel中的名称“类别”不匹配
  • 试一试

    
    
    我看到的问题(我完全希望其他人在这里纠正我)如下: (为清晰起见进行了编辑)

  • 不会设置Id,因为您正在发布到其他表单,并且Id没有隐藏字段,因此不会设置
  • 描述将不会被设置,因为没有可设置的内容
  • 不会设置类别,因为Ienumerable只在get中填充,而不是在post中填充(这很公平,因为您没有发布整个列表)
  • 类别未填充,因为您已将下拉列表命名为“类别”,因此它与viewmodel中的名称“类别”不匹配
  • 试一试

    
    
    你能发布整个视图吗?你好,马丁,我现在添加了整个视图。你能发布整个视图吗?你好,马丁,我现在添加了整个视图
    <%=Html.DropDownList("Category", Model.Categories)%>