在 Razor Pages 中调用操作
Calling Action in Razor Pages
作为 Razor Pages 的新手,我有一个关于从 Razor Pages 调用方法的问题。
我在我的域模型中定义了一个名为 subtractProduct 的方法。
在我的索引页代码中,我定义了 IActionResult sellProduct,它在指定的 ProductId 上调用 subtractProduct。但我不知道如何在我的 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 页面有 handler-methods
,它们是 HTTP 动词。因此,要从您的页面调用方法,您需要先输入 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
,不带 OnPost or OnGet
前缀或 Async
后缀。
编辑:这是视图示例:
<a asp-page-handler="SellProduct" asp-route-id="@item.ProductId">Sell Product</a>
有关更多信息,请查看:
添加以下 tagHelper
和用户 asp-action="@Model.ReturnUrl
" 以解决 url
在 Razor Pages 中调用操作的问题
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
作为 Razor Pages 的新手,我有一个关于从 Razor Pages 调用方法的问题。
我在我的域模型中定义了一个名为 subtractProduct 的方法。
在我的索引页代码中,我定义了 IActionResult sellProduct,它在指定的 ProductId 上调用 subtractProduct。但我不知道如何在我的 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 页面有 handler-methods
,它们是 HTTP 动词。因此,要从您的页面调用方法,您需要先输入 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
,不带 OnPost or OnGet
前缀或 Async
后缀。
编辑:这是视图示例:
<a asp-page-handler="SellProduct" asp-route-id="@item.ProductId">Sell Product</a>
有关更多信息,请查看:
添加以下 tagHelper
和用户 asp-action="@Model.ReturnUrl
" 以解决 url
在 Razor Pages 中调用操作的问题
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers