我代表了很多产品,但所有这些在控制器中的返回是我使用 ASP.NET Core 6 MVC 的第一个产品

问题描述 投票:0回答:1

我正确地代表了许多项目,但它在控制器中返回相同的对象,特别是数据库中的第一项

在控制器中:

public IActionResult AddToBasket(ProductsModel products)
{
    if (AuthController.user != null)
    {
        using Data data = new Data();

        int id = data.products.Where(x => x.Name == products.Name && x.Price == products.Price && x.Discription == products.Discription).ToList()[0].Id;

        data.basket.Add(new BasketModel { Amount = products.Amount, AccountId = AuthController.user.Id, ProductId = id });
        data.SaveChanges();

        return RedirectToAction("Products");
    }
}

在视图中,我有这个标记:

<form method="post" asp-action="AddToBasket" asp-controller="Products" style="width:100%;">
    @foreach(ProductsModel pro in ViewBag.prod)
    {
        <div class="col-lg-4 col-sm-12" style="float:right;">
            <div class="beds_section active">
                <input readonly="readonly" class="bed_text" value="@pro.Name" style="border:none;" asp-for="Name">
                <div><img src="../@pro.Img" class="image_2"></div>
                <input type="submit" value="Add to Basket" style="float:right;" name="input"/> 
                <input type="number" placeholder="amount" asp-for="Amount" value="1" min="1" max="@pro.Amount" style="width:80px;float:right; width:80px;" /> 
                <span asp-validation-for="Amount" class="text-danger"></span>
                <input style="border:none; width:150px;" readonly="readonly" value="@pro.Price" asp-for="Price" />
                <br />
                <br />
                <input style="border:none; width:100%; height:100%;"  readonly="readonly" value="@pro.Discription" asp-for="Discription">
            </div> 
        </div>
}
</form>

似乎所有产品都相同

asp-for

我第一次使用堆栈溢出时如何解决它可能我的问题不清楚😅

asp.net-core-mvc
1个回答
0
投票

我正确地代表了许多项目,但它在控制器中返回相同的对象,特别是数据库中的第一项

如果您在F12开发工具网络选项卡中检查添加到购物车的请求,您会发现数据如下所示。

enter image description here

似乎所有产品都相同

asp-for

正如您所提到的,表单中输入字段'的

name
属性具有相同的值,这导致了问题。

要解决此问题并将预期的产品项目添加到购物篮,您可以尝试修改代码以将产品项目分离到

<form>
,如下所示。

@foreach (ProductsModel pro in ViewBag.prod)
{
    <form method="post" asp-action="AddToBasket" asp-controller="home" style="width:100%;">
        <div class="col-lg-4 col-sm-12" style="float:right;">
            <div class="beds_section active">
                <input readonly="readonly" class="bed_text" value="@pro.Name" style="border:none;" asp-for="Name">
                <div><img src="../@pro.Img" class="image_2"></div>
                <input type="submit" value="Add to Basket" style="float:right;" name="input" />
                <input type="number" placeholder="amount" asp-for="Amount" value="1" min="1" max="@pro.Amount" style="width:80px;float:right; width:80px;" />
                <span asp-validation-for="Amount" class="text-danger"></span>
                <input style="border:none; width:150px;" readonly="readonly" value="@pro.Price" asp-for="Price" />
                <br />
                <br />
                <input style="border:none; width:100%; height:100%;" readonly="readonly" value="@pro.Discription" asp-for="Discription">
            </div>
        </div>

    </form>
} 
© www.soinside.com 2019 - 2024. All rights reserved.