MVC Post集合是空的

时间:2014-06-06 22:29:38

标签: asp.net-mvc

更新 真正的问题分为两部分。

  1. 模型需要属性,而不是字段(即获取和设置)

  2. 在调用Html.BeginCollectionItem(“Something”)时,使确定某些内容与类名或属性名称不匹配。它真的搞砸了剧本。

  3. 希望这可以为别人解除我刚才必须处理的悲痛。

    *

    我正在尝试实施Steven Sanderson的博文here中的代码 但我的数据结构不同,集合在一个包装类中。

    尽管我付出了最大努力,但我的帖子总是空洞的。我做错了什么?

    控制器:

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            var model = new GiftWrapper();
            model.Id = 46;
            model.Gifts= new[] {
                new Gift { Name = "Tall Hat", Price = 39.95 },
                new Gift { Name = "Long Cloak", Price = 120.00 },
            }.ToList();
            return View(model);
        }
    
        [HttpPost]
        public ActionResult Index(GiftWrapper model)
        {
            return View("Completed", model);
        }
    
        public ViewResult Add()
        {
            return View("GiftEditorRow", new Gift());
        }
    }
    

    型号:

    public class GiftWrapper
    {
        public int Id { get; set; }
        public IEnumerable<Gift> Gifts;
    }
    public class Gift
    {
        public string Name { get; set; }
        public double Price { get; set; }
    }
    

    查看:

    <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<EditorDemo.Models.GiftWrapper>" %>
    <%@ Import Namespace="EditorDemo.Helpers"%>
    
    <asp:Content ContentPlaceHolderID="MainContent" runat="server">
        <% using(Html.BeginForm()) { %>
            <div id="editorRows">
                <% foreach (var item in Model.Gifts)
                    Html.RenderPartial("GiftEditorRow", item);
                %>
            </div>
            <%= Html.ActionLink("Add another...", "Add", null, new { id = "addItem" }) %>
    
            <input type="submit" value="Finished" />
        <% } %>       
    </asp:Content>
    

1 个答案:

答案 0 :(得分:1)

将模型更改为:

public class GiftWrapper
{
    public int Id { get; set; }
    public IEnumerable<Gift> Gifts { get; set; }
}
public class Gift
{
    public string Name { get; set; }
    public double Price { get; set; }
}