razor Pageの初心者として、Razor Pageからメソッドを呼び出すことについて質問があります。
ドメインモデルにsubtractProductというメソッドが定義されています。
インデックスページのコードでは、指定したProductIdでsubtractProductを呼び出すIActionResult sellProductを定義しています。しかし、私は私のHTMLページでこのメソッドを呼び出す方法の手がかりはありません。多くの組み合わせを試しましたが、何も機能していないようです。誰もがこれに対処する方法を知っていますか?どんな助けでも大歓迎です!
私のドメインモデルは次のとおりです。
public class Product
{
public int ProductId { get; set; }
public int Quantity { get; set; }
...
public void SubtractProduct()
{
Quantity -= 1;
}
}
私のインデックスページのコードは次のとおりです。
public class IndexModel : PageModel
{
private readonly CfEshop.Data.ApplicationDbContext _context;
public IndexModel(CfEshop.Data.ApplicationDbContext context)
{
_context = context;
}
public IList<Models.Product> Product { get;set; }
public async Task OnGetAsync()
{
Product = await _context.Products
.Include(p => p.Categories).ToListAsync();
}
public IActionResult sellProduct(int id)
{
var products = _context.Products;
_context.Products.Find(id).SubtractProduct();
return Page();
}
}
そして最後に私のRazorページ:
@page
@model CfEshop.Pages.Product.IndexModel
<h2>Index</h2>
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.Product[0].Quantity)
</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.Product)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Quantity)
</td>
<td>
<a asp-page-handler="SellProduct" asp-route="@item.ProductId">Sell Product</a>
</td>
</tr>
}
</tbody>
</table>
Razorページには、HTTP動詞であるhandler-methods
があります。したがって、ページからメソッドを呼び出すには、On
の後にthe http verb you want
、次にmethod name
の順に記述する必要があります。
例えば。:
public IActionResult OnGetSellProduct(int id)
{
var products = _context.Products;
_context.Products.Find(id).SubtractProduct();
return Page();
}
そして、ビューでasp-page-handler
接頭辞またはAsync
接尾辞なしでOnPost or OnGet
に名前を渡します。
編集:ここにビューのサンプルがあります:
<a asp-page-handler="SellProduct" asp-route-id="@item.ProductId">Sell Product</a>
詳細については、以下をご覧ください。