Как передать идентификатор модели по страницам в Asp.Net - PullRequest
0 голосов
/ 14 февраля 2020

Я хочу передать идентификатор Model.Game со страницы сведений на другую страницу просмотра, которая называется Корзина. Я делаю это, вставляя @Html.DisplayFor(model => model.Game.ID) в app-route-id. Это уместно?

Details.cs html

@page "{id:int}"
@model GameSanctuary.Pages.Games.DetailsModel

@{
    ViewData["Title"] = "Details";
}

<h2>Details</h2>

<div>
    <h4>Game</h4>
    <hr />
    <dl class="dl-horizontal">
        <dt>
            @Html.DisplayNameFor(model => model.Game.G_Description)
        </dt>
        <dd>
            @Html.DisplayFor(model => model.Game.G_Description)
        </dd>
        <dt>
            @Html.DisplayNameFor(model => model.Game.G_Genre)
        </dt>
        <dd>
            @Html.DisplayFor(model => model.Game.G_Genre)
        </dd>
        <dt>
            @Html.DisplayNameFor(model => model.Game.G_Price)
        </dt>
        <dd>
            @Html.DisplayFor(model => model.Game.G_Price)
        </dd>
    </dl>
</div>
<div>
    <a asp-page="./Index">Back to List</a>
    <a asp-page="./Cart" asp-page-handler="buynow" class="btn" asp-route-id="@Html.DisplayFor(model => model.Game.ID)">Add to Cart</a>
</div>

Cart.cs html .cs

 public async Task<IActionResult> OnGetBuyNow(int id)
        {
            cart = SessionHelper.GetObjectFromJson<List<Item>>(HttpContext.Session, "cart");
            if (cart == null)
            {
                cart = new List<Item>();
                cart.Add(new Item
                {
                    Game = await _context.Game.FirstOrDefaultAsync(m => m.ID == id)
                });
                SessionHelper.SetObjectAsJson(HttpContext.Session, "cart", cart);
            }
            return RedirectToPage("Cart");
        }

Значение идентификатора, которое я получил в OnGetBuyNow, равно 0, но ожидаемое значение должно быть 1 на основе model.Game.ID в Details.cshtml. Это что-то не хватает между ними?

1 Ответ

0 голосов
/ 14 февраля 2020

нет, это не подходит.

Html.DisplayFor() отображает шаблон отображения, который соответствует типу, на котором вы его используете. Это не то, что вы хотите. То, что вы хотите - это, безусловно, простое число, которое можно ввести прямо следующим образом:

asp-route-id="@Model.Game.ID"

Я бы начал там и посмотрел, дает ли это то, что вы хотите

...