C# MVC 使用表单和参数将记录添加到 table

C# MVC Adding a record to a table with form and parameters

我在添加到数据库记录时遇到问题。 我想要做的是添加一条记录,其中包含从表单发送的参数。我正在从 table 中获取一件商品并给出数量,然后他们将其添加到订单 table.

我正在将它添加到 OrderDetails table 所以我需要 orderId。我从 Url 中抓取的。 下面是我的代码,它不工作。它可能会被简化,但我不确定在哪里修改它。

页面上的表单:

   @{ var OrderId = Request.Url.Segments[3];}
        <td>
            <form method="GET" action="~/OrderManager/AddToOrder/@OrderId" _lpchecked="1">
                <div class="row ">
                    <div class="input-group mb-3 col-xs-6 col-md-6">
                        <div class="input-group-prepend">
                            <span class="input-group-text" id="inputGroup-sizing-default">Qty</span>
                        </div>
                        <input style="max-width:75px;" aria-label="Qty" aria-describedby="inputGroup-sizing-default" type="number" class="form-control" id="quantity" min="1" name="quantity">
                    </div>

                    <div class="col-xs-6 col-md-6">
                        <button class="btn btn-primary btn-sm" type="submit" id="submit" onchange="usercheck">Add To Order</button>
                    </div>
                </div>
            </form>
        </td>

这是我的控制器操作:

public ActionResult Add(int id)
    {
        try
        {
            GeneralEntities db = new GeneralEntities();
            var result = db.Extras.ToList().OrderByDescending(x => x.CreatedDate);
            return View(result);
        }
        catch (Exception ex)
        {

            throw ex;
        }
    }

    public ActionResult AddToOrder(int OrderId, string id, int quantity)
    {
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        try
        {
            GeneralEntities ExtrasDb = new GeneralEntities(); 
            
            var addedExtra = ExtrasDb.Extras
                .Single(ext => ext.ExtrasName == id);

            var extra = new OrderDetail 
            {
                OrderId = OrderId,
                Extras = addedExtra.BillingExtrasId,                 
                Quantity = quantity,
                CreatedDate = DateTime.Now
            };

            ExtrasDb.OrderDetails.Add(extra);

            sb.Append("Sumitted");
            return Content(sb.ToString());
        }
        catch (Exception ex)
        {
            sb.Append("Error :" + ex.Message);
        }

        return Content(sb.ToString());

    }

感谢您的帮助!

修改后的代码更新:

我改变了一些东西。我现在似乎有我需要的东西,它说它提交但它没有将它保存到 table..

修改后的表格:

@{ var OrderId = Request.Url.Segments[3];}
        <td>
            <form method="POST" action="~/OrdersManager/Add/" _lpchecked="1">
                <div class="row ">
                    <div class="input-group mb-3 col-xs-6 col-md-6">
                        <div class="input-group-prepend">
                            <span class="input-group-text" id="inputGroup-sizing-default">Qty</span>
                        </div>
                        <input data-val="true" id="OrderId" name="OrderId" type="hidden" value="@OrderId" />
                        <input data-val="true" id="id" name="id" type="hidden" value="@item.BillingExtrasId" />
                        <input style="max-width:75px;" aria-label="Qty" aria-describedby="inputGroup-sizing-default" type="number" class="form-control" id="quantity" min="1" name="quantity">
                    </div>

                    <div class="col-xs-6 col-md-6">
                        <button class="btn btn-primary btn-sm" type="submit" id="submit" onchange="usercheck">Add To Order</button>
                    </div>
                </div>
            </form>
        </td>

修改后的控制器代码:

        [HttpPost]
    public ActionResult Add(int OrderId, Guid id, int quantity)
    {
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        try
        {
            GeneralEntities ExtrasDb = new GeneralEntities(); 
            // Retrieve the album from the database
            var addedExtra = ExtrasDb.Extras
                .Single(ext => ext.BillingExtrasId == id);

            var extra = new OrderDetail 
            {
                OrderId = OrderId,
                Extras = addedExtra.BillingExtrasId,
                UnitPrice = addedExtra.Price,
                Quantity = quantity,
                CreatedDate = DateTime.Now
            };

            ExtrasDb.OrderDetails.Add(extra);

            sb.Append("Sumitted");
            return Content(sb.ToString());
        }
        catch (Exception ex)
        {
            sb.Append("Error :" + ex.Message);
        }

        return Content(sb.ToString());

    }

添加

ExtrasDb.SaveChanges();

就在 try 块内第一个 return 语句之前。

(你发现错误并在评论中提到了它。我只是确认并将其转化为答案。)