库存、订单商品和订单
Inventory, OrderItems and Order
我现在面临的问题是我有多个订单,每个订单包含多个项目。每个订单必须 link 给客户,每个项目必须 link 给库存项目。
这是我的订单 Class
public class Order
{
[Key]
public int Id { get; set; }
public int TotalItems { get; set; }
public DateTime DeliveryDate { get; set; }
public string OrderNumber { get; set; }
public int ClientId { get; set; }
[ForeignKey("ClientId")]
public string DeliveryAddress { get; set; }
public List<OrderItem> OrderItems { get; set; }
public Client Clients { get; set; }
}
订单项Class
public class OrderItem
{
public int Id { get; set; }
public int OrderId{ get; set; }
[ForeignKey("OrderId")]
public int InventoryInfoId { get; set; }
[ForeignKey("InventoryInfoId")]
[Required]
public string ItemCode { get; set; }
public int Quantity { get; set; }
public InventoryInfo InventoryInfo { get; set; }
public Order Order { get; set; }
}
知道如何 link 他们吗?
我想我已经解决了上面的问题
我一处理,下一个问题就出来了
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(m => item.OrderNumber)
</td>
<td>
@Html.DisplayFor(m=> item.DeliveryAddress)
</td>
<td>
@Convert.ToDateTime(item.DeliveryDate).ToString("dd-MM-yyyy")
</td>
<td>
@Html.DisplayFor(m=>item.Client.ClientCode)
</td>
<td>
@Html.DisplayFor(modelItem => item.TotalItems)
</td>
<td>
<a asp-action="Edit" asp-route-id="@item.Id" class="btn btn-success">Edit</a>
<a asp-controller="OrderItem" asp-action="OrderDetail" asp-route-id="@item.Id" class="btn btn-success">Details</a>
<a asp-action="Delete" asp-route-id="@item.Id" class="btn btn-success">Delete</a>
</td>
</tr>
}
这是我的订单索引页面,单击详细信息按钮后,该页面应重定向到 OrderItems 页面。然而它没有。
@model List<IOSystem.Models.OrderItem>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(m => item.ItemCode)
</td>
<td>
@Html.DisplayFor(m => item.Quantity)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.Id }) |
@Html.ActionLink("Delete", "Delete", new { id = item.Id })
</td>
</tr>
}
这是错误消息。
InvalidOperationException:传入 ViewDataDictionary 的模型项的类型为 'System.Collections.Generic.List1[IOSystem.Models.Order]', but this ViewDataDictionary instance requires a model item of type 'System.Collections.Generic.List
1[IOSystem.Models.OrderItem]'。
忘记添加我的控制器
[HttpPost, ActionName("OrderDetail")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> OrderDetailPost(int? id)
{
if (id == null)
{
return NotFound();
}
var orderItems = await _context.Orders.Include(s=>s.OrderItems).FirstOrDefaultAsync(i => i.OrderItemId == id);
return View(orderItems);
}
您的 InvalidOperationException
表示您传递的是 List<Order>
但 Razor 页面中的模型是 List<OrderItem>
在您的控制器代码中:
[HttpPost, ActionName("OrderDetail")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> OrderDetailPost(int? id)
{
if (id == null)
{
return NotFound();
}
var orderItems = await _context.Orders.Include(s=>s.OrderItems).FirstOrDefaultAsync(i => i.OrderItemId == id);
return View(orderItems);
}
您正在访问 _context.Orders
,这是您的 Orders
table。您 .Include
-ing OrderItems
但您返回 Orders
.
从 var orderItems = ...
传回 OrderItems
或将 Razor 页面的模型调整为 List<Order>
。
如果你想在控制器代码中 select 来自 Order
的 OrderItems
,请将你的 LINQ 语句更新为:
var orderItems = (await _context.Order
.Include(s => s.OrderItems)
.FirstOrDefaultAsync(i => i.OrderItemId == id))
.Select(x => x.OrderItems); // <-- grab just the OrderItems
我现在面临的问题是我有多个订单,每个订单包含多个项目。每个订单必须 link 给客户,每个项目必须 link 给库存项目。 这是我的订单 Class
public class Order
{
[Key]
public int Id { get; set; }
public int TotalItems { get; set; }
public DateTime DeliveryDate { get; set; }
public string OrderNumber { get; set; }
public int ClientId { get; set; }
[ForeignKey("ClientId")]
public string DeliveryAddress { get; set; }
public List<OrderItem> OrderItems { get; set; }
public Client Clients { get; set; }
}
订单项Class
public class OrderItem
{
public int Id { get; set; }
public int OrderId{ get; set; }
[ForeignKey("OrderId")]
public int InventoryInfoId { get; set; }
[ForeignKey("InventoryInfoId")]
[Required]
public string ItemCode { get; set; }
public int Quantity { get; set; }
public InventoryInfo InventoryInfo { get; set; }
public Order Order { get; set; }
}
知道如何 link 他们吗?
我想我已经解决了上面的问题
我一处理,下一个问题就出来了
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(m => item.OrderNumber)
</td>
<td>
@Html.DisplayFor(m=> item.DeliveryAddress)
</td>
<td>
@Convert.ToDateTime(item.DeliveryDate).ToString("dd-MM-yyyy")
</td>
<td>
@Html.DisplayFor(m=>item.Client.ClientCode)
</td>
<td>
@Html.DisplayFor(modelItem => item.TotalItems)
</td>
<td>
<a asp-action="Edit" asp-route-id="@item.Id" class="btn btn-success">Edit</a>
<a asp-controller="OrderItem" asp-action="OrderDetail" asp-route-id="@item.Id" class="btn btn-success">Details</a>
<a asp-action="Delete" asp-route-id="@item.Id" class="btn btn-success">Delete</a>
</td>
</tr>
}
这是我的订单索引页面,单击详细信息按钮后,该页面应重定向到 OrderItems 页面。然而它没有。
@model List<IOSystem.Models.OrderItem>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(m => item.ItemCode)
</td>
<td>
@Html.DisplayFor(m => item.Quantity)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.Id }) |
@Html.ActionLink("Delete", "Delete", new { id = item.Id })
</td>
</tr>
}
这是错误消息。
InvalidOperationException:传入 ViewDataDictionary 的模型项的类型为 'System.Collections.Generic.List1[IOSystem.Models.Order]', but this ViewDataDictionary instance requires a model item of type 'System.Collections.Generic.List
1[IOSystem.Models.OrderItem]'。
忘记添加我的控制器
[HttpPost, ActionName("OrderDetail")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> OrderDetailPost(int? id)
{
if (id == null)
{
return NotFound();
}
var orderItems = await _context.Orders.Include(s=>s.OrderItems).FirstOrDefaultAsync(i => i.OrderItemId == id);
return View(orderItems);
}
您的 InvalidOperationException
表示您传递的是 List<Order>
但 Razor 页面中的模型是 List<OrderItem>
在您的控制器代码中:
[HttpPost, ActionName("OrderDetail")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> OrderDetailPost(int? id)
{
if (id == null)
{
return NotFound();
}
var orderItems = await _context.Orders.Include(s=>s.OrderItems).FirstOrDefaultAsync(i => i.OrderItemId == id);
return View(orderItems);
}
您正在访问 _context.Orders
,这是您的 Orders
table。您 .Include
-ing OrderItems
但您返回 Orders
.
从 var orderItems = ...
传回 OrderItems
或将 Razor 页面的模型调整为 List<Order>
。
如果你想在控制器代码中 select 来自 Order
的 OrderItems
,请将你的 LINQ 语句更新为:
var orderItems = (await _context.Order
.Include(s => s.OrderItems)
.FirstOrDefaultAsync(i => i.OrderItemId == id))
.Select(x => x.OrderItems); // <-- grab just the OrderItems