en tant que débutant sur Razor Pages, j'ai une question concernant les méthodes d'appel depuis Razor Page.
J'ai une méthode appelée subtractProduct définie dans mon modèle de domaine.
Dans mon code de page d'index, je définis IActionResult sellProduct qui appelle subtractProduct sur ProductId spécifié. Mais je ne sais pas comment appeler cette méthode sur ma page html. J'ai essayé beaucoup de combinaisons, mais rien ne semble fonctionner. Quelqu'un sait comment gérer cela? Toute aide est grandement appréciée!
Mon modèle de domaine est:
public class Product
{
public int ProductId { get; set; }
public int Quantity { get; set; }
...
public void SubtractProduct()
{
Quantity -= 1;
}
}
Le code de ma page d'index est:
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();
}
}
Et enfin ma 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>
Les pages de rasoir ont handler-methods
qui sont des verbes HTTP. Donc, pour appeler une méthode depuis votre page, vous devez mettre On
suivi de the http verb you want
puis votre method name
.
Par exemple.:
public IActionResult OnGetSellProduct(int id)
{
var products = _context.Products;
_context.Products.Find(id).SubtractProduct();
return Page();
}
Et selon vous, passez le nom au asp-page-handler
sans le OnPost or OnGet
préfixe ou Async
suffixe.
Edit: voici l'exemple de vue:
<a asp-page-handler="SellProduct" asp-route-id="@item.ProductId">Sell Product</a>
Pour plus d'informations, consultez ceux-ci: