代码之家  ›  专栏  ›  技术社区  ›  xcelm

在Razor页面中调用操作

  •  1
  • xcelm  · 技术社区  · 6 年前

    作为剃须刀页面的新手,我有一个关于从剃须刀页面调用方法的问题。

    我在我的域模型中定义了一个名为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();
        }
    }
    

    最后我的剃刀页面:

    @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>
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Hameed    6 年前

    剃刀的页面有 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>
    

    有关更多信息,请查看:

    Introduction to Razor Pages .

    Razor Pages Handler Methods .