将视图中的 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_Service
和Additional_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 从控制器返回列表到视图