[在此處輸入圖片描述][1]
как выглядит ошибка: [1]: https://i.stack.imgur.com/6PkFJ.png 事情的本質:有一個可以添加到購物車的產品串列,但是當你點擊添加到購物車,表單不傳輸產品 ID,它僅傳輸零,同時找不到這樣的產品,并且到物件的鏈接丟失。
以表格查看:
@model PagedList<Product>
<div class="container-fluid">
@foreach (Product p in Model) {
<div class="row">
<div class="col">
<div class="card m-1 p-1 bg-light">
<div class="bg-faded p-1">
<h4>
@p.Name
<span class="badge badge-pill badge-primary"
style="float:right">
<small>[email protected]</small>
</span>
</h4>
</div>
<form id="@p.Id" asp-page = "/Cart"
method="post">
<input type="hidden" name="Id" value="@p.Id" />
<input type="hidden" name="Name"
value="@p.Name" />
<input type="hidden" name="RetailPrice"
value="@p.RetailPrice" />
<input type="hidden" name="returnUrl" value="@ViewContext.HttpContext.Request.PathAndQuery()" />
<span class="card-text p-1">
@(p.Description
?? "(No Description Available")
<button type="submit"
class="btn btn-success btn-sm pull-right"
style="float:right">
Add To Cart
</button>
</span>
</form>
</div>
</div>
</div>
}
</div>
</div>
</div>
</div>
產品 ID 應該傳遞給 onpost,但 0 傳遞給那里
public class CartModel : PageModel
{
private IRepository repository;
public Cart Cart { get; set; }
public CartModel(IRepository repo, Cart cartService)
{
repository = repo;
Cart = cartService;
}
public string ReturnUrl { get; set; }
public void OnGet(string returnUrl)
{
ReturnUrl = returnUrl ?? "/store";
}
public IActionResult OnPost(long productId, string returnUrl)
{
Product product = repository.Products.FirstOrDefault(p=>p.Id == productId);
Cart.AddItem(product, 1);
return RedirectToPage(new { returnUrl = returnUrl });
}
public IActionResult OnPostRemove(long productId, string returnUrl)
{
Cart.RemoveLine(Cart.Lines.First(c=>c.Product.Id == productId).Product);
return RedirectToPage(new {returnUrl = returnUrl});
}
}
}
我不明白為什么會這樣,我需要你的幫助
uj5u.com熱心網友回復:
在 Razor Pages 模型系結中,當您涉及向處理程式方法添加引數時。引數以表單欄位命名,并為預期資料提供適當的型別。當表單發布時,Razor Pages 框架呼叫 OnPost 方法并看到它有兩個引數。
public IActionResult OnPost(long productId, string returnUrl)
{
Product product = repository.Products.FirstOrDefault(p=>p.Id == productId);
Cart.AddItem(product, 1);
return RedirectToPage(new { returnUrl = returnUrl });
}
它提取與引數名稱匹配的已發布表單值,并自動將表單中的值分配給引數,如果該值可以轉換為引數表示的型別。
您productId在 OnPost 方法中使用,但在您的 View with form 中,我看不到您的productId欄位。請檢查它,并進行一些更改。
uj5u.com熱心網友回復:
輸入表單的名稱和您在“OnPost”方法中獲得的引數名稱應該相互匹配。
而不是這個<input type="hidden" name="Id" value="@p.Id" />
試試這個<input type="hidden" name="productId" value="@p.Id" />
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/493840.html
標籤:C# asp.net-mvc asp.net 核心 剃刀
上一篇:k8s單master集群部署
