【问题标题】:Remember Form Input in .Net Core记住 .Net Core 中的表单输入
【发布时间】:2021-07-28 11:46:44
【问题描述】:

我目前正在处理一个处理超过 1000 条记录的网站。每条记录都需要一个输入字段,用户可以在其中填写他想要的产品数量。 我尝试过四处搜索,但大多数“答案”都与 PHP 相关,或者不适用于我,因为它们对输入具有唯一的 ID。

@foreach(var listItem in Model)
{
    <tr>
        <td>@listItem.Name</td>
        <td>@listItem.Brand</td>
        <td>@listItem.Weight</td>
        <td>@listItem.Country</td>
        <td>@listItem.Price</td>
        <td>
             <form method="post"  asp-action="AddToCart">
                 <input type="hidden" name="ColumnNr" value="@listitem.ColumnNr" />
                 <input type="hidden" name="ColumnFollowUpNr" value="@listitem.ColumnFollowUpNr" />
                 <input type="hidden" name="sortingItem" value="@listitem.MainCategory" />
                 <input id="myInput" type="number" name="Amount" value="" onchange="this.form.submit();"/>
             </form>
        </td>
    </tr>
} 

我的 AddToCart 方法将 ColumnNr、ColumnFollowUpNr 和金额放入可以在网站上的任何位置获取的 Session Cookie 中。我在另一个控制器中使用这些来为购物车中的商品创建列表。

        public IActionResult AddToCart(short ColumnNr, short ColumnFollowUpNr, string sortingItem, int Amount)
        {
            var LoggedUser = Convert.ToInt32(User.Identity.Name);
            var amount = Amount;

            List<OrderItem> cart = new List<OrderItem>();
            string cartString = HttpContext.Session.GetString("Jager.Items");
            if (cartString != null)
            {
                //if cart exists --> deserialize. if OrderItem exists --> edit Amount. Else create new OrderItem
                cart = JsonConvert.DeserializeObject<List<OrderItem>>(cartString);
                var result = cart.FirstOrDefault(x => x.ColumnNr == ColumnNr && x.ColumnFollowUpNr == ColumnFollowUpNr );
                if (result != null)
                {
                    //only edits the amount if the OrderItem already exists
                    result.Amount = Amount;
                }
                else {
                    OrderItem order = new OrderItem
                    {
                        Id = ColumnNr + ColumnFollowUpNr ,
                        CurrentUser = LoggedUser,

                        Amount = Amount,
                        ColumnNr = ColumnNr,
                        ColumnFollowUpNr = ColumnFollowUpNr 

                    };
                    cart.Add(order);
                }
            }

            else {
                OrderItem order = new OrderItem
                {
                    Id = ColumnNr + ColumnFollowUpNr ,
                    CurrentUser = LoggedUser,

                    Amount = Amount,
                    ColumnNr = ColumnNr ,
                    ColumnFollowUpNr = ColumnFollowUpNr 
                };
                cart.Add(order);
            }

            cartString = JsonConvert.SerializeObject(cart);
            HttpContext.Session.SetString("Jager.Items", cartString);

            return RedirectToAction("Index", new { item = sortingItem.Trim() });
        }

现在的问题是:我想记住用户输入并在激活方法/刷新网站时。它需要记住该特定列上的输入。我想我需要使用 JavaScript 或 JQuery 才能从 Cookie(名为 Jager.Items)中获取 Amount 并将其放回指定的列,但我不知道该怎么做,因为没有我的输入有一个唯一的 ID。

任何帮助都非常受欢迎,因为我对 JQuery 非常陌生,并且对 JavaScript 几乎没有经验。

【问题讨论】:

    标签: javascript jquery asp.net-mvc asp.net-core


    【解决方案1】:

    我认为您可以将属性Amount 添加到@listItem。在您的 Index 操作中,您可以从会话中获取金额并将其分配给 Amount 属性。然后,在索引页面中,您可以获取金额。就像购物车工作流程一样。

    <input id="myInput" type="number" name="Amount" value="@listItem.Amount" onchange="this.form.submit();"/>
    

    【讨论】:

    • 我想我执行了你让我做的事情。因为正在显示的产品来自我无法更改任何信息的数据库,所以我必须添加该表的副本并向其添加属性Amount。我目前正在使用该副本来显示我的所有物品(包括金额)。感谢您的帮助!
    猜你喜欢
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多