Призыв к действию на бритвенных страницах - PullRequest
0 голосов
/ 22 декабря 2018

как новичок в Razor Pages. У меня вопрос по поводу вызова методов из Razor Page.

У меня есть метод subtractProduct, определенный в моей доменной модели.

В коде моей страницы индекса я определяю IActionResult sellProduct, который вызывает subtractProduct для указанного ProductId.Но я понятия не имею, как вызвать этот метод на моей 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>

1 Ответ

0 голосов
/ 22 декабря 2018

Страницы бритвы имеют 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>

Для получения дополнительной информации проверьте их:

Введение в страницы бритв .

Методы обработки страниц бритвы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...