当将参数 cartId 传递给操作方法 Index(( 并转到路由/cart/{cartId} 时,因此/cart/1 - cartId 始终为空!
我在购物车控制器中有一个操作方法.cs
public IActionResult Index([FromRoute] int? cartId)
{
if(cartId == null)
Cart = _cartsService.GetCartById(1);
if (!cartId.HasValue)
return Content("Cart id with given id not found!");
// Model bind to the Cart of MockCartRepository (entity type?)
Cart = _cartsService.GetCartById(cartId.Value);
if (Cart == null)
return Content("Cart not found in database");
return View(Cart);
}
我有一个名为index.cshtml的视图
@model eComStore.Models.Cart
@{
ViewData["Title"] = "Cart";
}
<div class="text-center">
<h2 class="display-4">My Cart Id @Model.cartId</h2>
@foreach (var product in Model.ProductsInCart)
{
<h5>Product Id @product.ProductId</h5>
<h5>Product Qty @product.qty</h5>
<br />
<br />
<br />
}
</div>
调试时:转到 https://localhost:44308/Cart/1 我在 cartId 中得到一个空值
在核心剃刀页面和 MVC 中传递参数的方式 ASP.NET 有什么区别吗?
我做错了什么?
您是否在启动.cs中配置了 MapControllerRoute,如下所示?
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
您可能需要使用 cartId 更改 ID 或更改
public IActionResult Index([FromRoute] int? id)
它可以通过路线购物车/索引/1 访问。
https://learn.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-3.1
编辑
endpoints.MapControllerRoute(
"Cart",
"Cart/{cartId}",
new { controller = "Cart", action = "Index" }
);
和
public IActionResult Index([FromRoute] int? cartId)
然后可以使用购物车/1 访问它
你可能想做这样的事情
[HttpGet]
public IActionResult Index([FromQuery] int cartId)
{
// Your code here
}
或
[HttpGet]
[Route("/yourroutehere/{id:int}")]
public IActionResult Index([FromQuery] int cartId)
{
// Your code here
就个人而言,我不会使您的int成为可为空的项目,但这应该使其对您有用