无法从 MVC 视图获取 ICollection 实体

Can't get ICollection entities from MVC View

所以我正在为一家能够处理活动 Table 预订的餐厅制作应用程序。

我想要的是一个事件模型,以及一个 Table 模型,我可以在其中创建表格并将它们用于我之后创建的每个事件。

问题是在事件创建中获取表格后,我无法将这些表格保存为事件的副本(更准确地说,创建 Post 中的 @event.Tables 为空):

事件模型:

public class Event
    {
        public Event()
        {
            this.Tables = new HashSet<Table>();
        }

        public int Id { get; set; }
        public string EventName { get; set; }

        public String StartDate { get; set; }
        
        public String StartTime { get; set; }
        public string ImageURL { get; set; }
        public string Description { get; set; }

        public virtual ICollection<Table> Tables { get; set; }

    }

Table 型号:

 public class Table //Model for Table Conf
    {
        public enum ReservationState {
            [Display(Name = "Available")]
            Available,
            [Display(Name = "Processing")]
            Processing,
            [Display(Name = "Reserved")]
            Reserved
        }
        public int Id { get; set; }
        public int Price { get; set; }
        public string TableIdentifier { get; set; }
        public int NPeople { get; set; }
        public ReservationState ReservationStatus { get; set; }
        public virtual int? EventId { get; set; }

    }

事件控制器:

 // GET: Events/Create
        public IActionResult Create()
        {
            List<Table> tables = _context.Table.Where(t => t.EventId == null).AsNoTracking().ToList();
            Event newEvent = new Event();
            foreach(Table table in tables)
            {
                newEvent.Tables.Add(table);
            }
            return View(newEvent);
        }

        // POST: Events/Create
        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create([Bind("Id,EventName,StartDate,StartTime,ImageURL,Description,Tables")] Event @event)
        {
            if (ModelState.IsValid)
            {
                foreach (Table table in @event.Tables)
                {
                    Table cloneTable = new Table();
                    _context.Table.Add(cloneTable);
                    int cloneId = cloneTable.Id;
                    var sourceValues = _context.Entry(table).CurrentValues;
                    _context.Entry(cloneTable).CurrentValues.SetValues(sourceValues);

                    cloneTable.EventId = @event.Id;
                    cloneTable.Id = cloneId;
                    
                }
                _context.Add(@event);
                await _context.SaveChangesAsync();
                
                return RedirectToAction(nameof(Index));
            }
            return View(@event);
        }

Event Create View(保存表格的部分,因为其他一切正常,我也可以在视图中正确看到表格:

<div class="form-group">

                @for (var i = 0; i < Model.Tables.Count; i++)
                {

                    <p>@Model.Tables.ElementAt(i).TableIdentifier - @Model.Tables.ElementAt(i).ReservationStatus  - @Model.Tables.ElementAt(i).Id </p>
                    <input type="hidden" asp-for="@Model.Tables.ElementAt(i).Id" name="@Model.Tables.ElementAt(i).Id"
                           value="@Model.Tables.ElementAt(i).Id" />
                    <input type="hidden" asp-for="@Model.Tables.ElementAt(i).NPeople" name="@Model.Tables.ElementAt(i).NPeople"
                           value="@Model.Tables.ElementAt(i).NPeople" />
                    <input type="hidden" asp-for="@Model.Tables.ElementAt(i).Price" name="@Model.Tables.ElementAt(i).Price"
                           value="@Model.Tables.ElementAt(i).Price" />
                    <input type="hidden" asp-for="@Model.Tables.ElementAt(i).TableIdentifier" name="@Model.Tables.ElementAt(i).TableIdentifier"
                           value="@Model.Tables.ElementAt(i).TableIdentifier" />
                    <input type="hidden" asp-for="@Model.Tables.ElementAt(i).EventId" name="@Model.Tables.ElementAt(i).EventId"
                           value="@Model.Tables.ElementAt(i).EventId" />
                    <select asp-for="@Model.Tables.ElementAt(i).ReservationStatus" name="@Model.Tables.ElementAt(i).ReservationStatus" asp-items="Html.GetEnumSelectList<Table.ReservationState>()">
                    </select>
                }
</div>

每个字段的名称不正确。

替换此代码并尝试:

<div class="form-group">


                @for(var i = 0; i<Model.Tables.Count; i++)
                {

                    <p>@Model.Tables.ElementAt(i).TableIdentifier - @Model.Tables.ElementAt(i).ReservationStatus  - @Model.Tables.ElementAt(i).Id</p>
                    <input type = "hidden" asp-for="@Model.Tables.ElementAt(i).Id" name="Tables[@(i)].Id"
                           value="@Model.Tables.ElementAt(i).Id" />
                    <input type = "hidden" asp-for="@Model.Tables.ElementAt(i).NPeople" name="Tables[@(i)].NPeople"
                           value="@Model.Tables.ElementAt(i).NPeople" />
                    <input type = "hidden" asp-for="@Model.Tables.ElementAt(i).Price" name="Tables[@(i)].Price"
                           value="@Model.Tables.ElementAt(i).Price" />
                    <input type = "hidden" asp-for="@Model.Tables.ElementAt(i).TableIdentifier" name="Tables[@(i)].TableIdentifier"
                           value="@Model.Tables.ElementAt(i).TableIdentifier" />
                    <input type = "hidden" asp-for="@Model.Tables.ElementAt(i).EventId" name="Tables[@(i)].EventId"
                           value="@Model.Tables.ElementAt(i).EventId" />
                    <select asp-for="@Model.Tables.ElementAt(i).ReservationStatus" name="Tables[@(i)].ReservationStatus" asp-items="Html.GetEnumSelectList<Table.ReservationState>()">
                    </select>
                }
</div>