所以我正在為一家能夠處理事件表預訂的餐廳制作一個應用程式。
我想要的是一個事件模型和一個表模型,我將能夠在其中創建表并將它們用于我之后創建的每個事件。
問題是,在事件創建中獲得表后,我無法將這些表保存為事件的副本(更準確地說,創建帖子中的 @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; }
}
表型號:
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);
}
事件創建視圖(用于保存表格的部分,因為其他一切都作業正常,我也可以正確看到視圖中的表格:
<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>
uj5u.com熱心網友回復:
為每個欄位指定的名稱不正確。
替換此代碼并嘗試:
<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>
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/437625.html
標籤:。网 asp.net-mvc
