已经做到烂掉的 CRUD 又来了,最後还是要把订单管理的页面建出来
沿用前面建立的 OrderController.cs
控制器
这次需要建立两个 Action:
public async Task<IActionResult> Index()
{
List<OrderViewModel> orderVM = new List<OrderViewModel>();
var userId = _userManager.GetUserId(User);
var orders = await _context.Order.
OrderByDescending(k => k.OrderDate). //依照日期排序
Where(m => m.UserId == userId).ToListAsync();
foreach(var item in orders)
{
item.OrderItem = await _context.OrderItem.
Where(p => p.OrderId == item.Id).ToListAsync();
var vm = new OrderViewModel()
{
Order = item,
CartItems = GetOrderItems(item.Id)
};
orderVM.Add(vm);
}
return View(orderVM);
}
private List<CartItem> GetOrderItems(int orderId)
{
var OrderItems = _context.OrderItem.Where(p => p.OrderId == orderId).ToList();
List<CartItem> orderItems = new List<CartItem>();
foreach (var orderitem in OrderItems)
{
CartItem item = new CartItem(orderitem);
item.Product = _context.Product.Single(x => x.Id == orderitem.ProductId);
orderItems.Add(item);
}
return orderItems;
}
可以比照前面在结帐流程显示订单的方式
public async Task<IActionResult> Details(int? Id)
{
if (Id == null)
{
return NotFound();
}
var order = await _context.Order.FirstOrDefaultAsync(m => m.Id == Id);
if (order.UserId != _userManager.GetUserId(User))
{
return NotFound();
}
else
{
order.OrderItem = await _context.OrderItem.
Where(p => p.OrderId == Id).ToListAsync();
ViewBag.orderItems = GetOrderItems(order.Id);
}
return View(order);
}
在 _Layout.cshtml
引用 SignInManager
来得知登入状态
@using Microsoft.AspNetCore.Identity
@inject SignInManager<IdentityUser> SignInManager
加入选项,并设定只有在登入状态下才看的到 [我的订单] 选项
@if (SignInManager.IsSignedIn(User)){
<li class="nav-item">
<a class="nav-link text-dark" asp-controller="Order" asp-action="Index">我的订单</a>
</li>
}
到这里前台该有的功能都完成了,铁人赛也到尾声了,剩下的天数就来慢慢收尾吧!
<<: Angular 深入浅出三十天:表单与测试 Day25 - 测试进阶技巧 - DI 抽换
这篇内容延续上一篇的部份,来加上 Antiforgery Token 的给定及验证 ! Case01...
想要制作一个假背包,利用按钮显示背包,再按下按钮关闭背包。 要使用GameObject.SetAct...
所有的网站大概可以分成两类:静态网页、动态网页,静态网页顾名思义就是静止的网页,不会去太频繁的更新内...
启动 Laravel 专案前的环境设置还是挺麻烦的,不过目前 Laravel 官方指南的安装方式变成...
GraphQL (Hasura)系列,忘记介绍最一开始从前端连线到GraphQL (Hasura)一...