将视图中的 ForEach 值插入数据库 MVC

Posted

技术标签:

【中文标题】将视图中的 ForEach 值插入数据库 MVC【英文标题】:Insert ForEach Value in View into the Database MVC 【发布时间】:2021-01-16 06:54:41 【问题描述】:

您好,目前我正在为我的项目做一个购物车

我想问一下如何将 ForEach 中的值导入数据库。

例如,我的视图中有以下数据。

@foreach (Cart_Has_Services c in Model)
    
        <div class="cart-row">
            <div class="cart-items">@c.Cart_Service</div>
            <div class="cart-items">@c.Additional_Notes</div>
            <div class="cart-items">@c.Unit_Price</div>
            <div class="cart-items">
                <form asp-controller="Cart" asp-action="UpdateCart" formaction="post">
                    <input type="number" class="item-quantity-input" value="@c.Quantity" />
                    <input type="submit" class="btn btn-secondary" value="Update" />
                </form>
            </div>
            <div class="cart-items">
                <a asp-controller="Cart"
                   asp-action="DeleteItem"
                   asp-route-id="@c.Cart_Id"
                   onclick="return confirm('Delete Serivce @c.Cart_Service')">
                    Delete
                </a>
            </div>
        </div>
    

就目前而言,我想将数据(购物车服务、附加说明和数量)插入到我的数据库(订单)中。

在我的控制器中:

public IActionResult Checkout(Cart_Has_Services cart) 
     
    
        List<Cart_Has_Services> carts = DBUtl.GetList<Cart_Has_Services>("SELECT * FROM Cart");        
        string sql = @"INSERT INTO [Order](Order_Name,Order_Description,Order_Quantity) 
                     VALUES('0','1',2)";
        int ord = DBUtl.ExecSQL(sql, cart.Cart_Service, cart.Additional_Notes, cart.Quantity);
        if (ord == 1)
        
            TempData["Message"] = "Perofrmance Successfully Created";
            TempData["MsgType"] = "success";
            return RedirectToAction("Success");

        
        else
        
            ViewData["Message"] = DBUtl.DB_Message;
            ViewData["MsgType"] = "danger";
            return View("ShoppingCart");
        
    

我尝试了我插入的方法,但它没有插入数据就创建了。

我该如何解决这个问题?

希望能得到一些指导。

谢谢

【问题讨论】:

【参考方案1】:

视图中的表单只提交Quantity,没有Cart_ServiceAdditional_Notes。 要提交它们的值,您可以在表单中设置隐藏输入。您还应该为模型绑定的输入设置名称属性。

@foreach (Cart_Has_Services c in Model)

    <div class="cart-row">
        <div class="cart-items">@c.Cart_Service</div>
        <div class="cart-items">@c.Additional_Notes</div>
        <div class="cart-items">@c.Unit_Price</div>
        <div class="cart-items">
            <form asp-controller="Cart" asp-action="UpdateCart" formaction="post">
                
                <input type="hidden" name="Cart_Service" value="@c.Cart_Service" />
                <input type="hidden" name="Additional_Notes" value="@c.Additional_Notes" />
                <input type="number" name="Quantity" class="item-quantity-input" value="@c.Quantity" />
                <input type="submit" class="btn btn-secondary" value="Update" />
            </form>
        </div>
        <div class="cart-items">
            <a asp-controller="Cart"
               asp-action="DeleteItem"
               asp-route-id="@c.Cart_Id"
               onclick="return confirm('Delete Serivce @c.Cart_Service')">
                Delete
            </a>
        </div>
    </div>

【讨论】:

感谢您的回复。我的控制器怎么样,我需要编辑什么吗? 嗨@YongKevin,这个控制器操作(Checkout)是否处理​​从表单提交的请求?既然form target action是UpdateCart,那么view和这个controller action是什么关系呢? 我已经删除的 UpdateCart。现在,我只使用 CheckOut 作为提交表单的操作 @Yong Kevin,好的,那你可以在方法处设置断点,debug看cart是否接受正确的值,如果接受,继续,检查数据是否插入成功。 嗨,我尝试了该方法并且正在工作,但现在我面临另一个问题。现在,我想插入一个解析表,我需要检索 Id(Order_id 等)但 Id 是自动 INSERT,如何为我的第二个 INSERT 语句检索自动生成的 ID(Order_Id)

以上是关于将视图中的 ForEach 值插入数据库 MVC的主要内容,如果未能解决你的问题,请参考以下文章

将 MVC 视图呈现为 Parallel.ForEach 中的字符串时的依赖注入问题

如何将消息插入取决于会话值的视图。 ASP.NET MVC。最佳实践

C# MVC 4 RAZOR - JSON 使用 @foreach 从控制器返回列表到视图

带有模型和视图包的视图中的 C# MVC foreach 循环

foreach (xmlNode) 只插入第一个值

如何在 mvc 视图中将剃刀值传递给 jquery 函数