gpt4 book ai didi

c# - 如何在 ASP.NET MVC 5 中插入主从表

转载 作者:行者123 更新时间:2023-11-30 16:05:41 28 4
gpt4 key购买 nike

我在数据库中有Orders 表和OrderDetails 表。使用 Entity Framework 6 我获得了一个模型,因此我从中生成了类。我还从 Orders 表生成了 Controller 和 View 。

Orders
folio (PK)
date
customer (FK)

OrdersDetail
folio (FK) -- to the Orders table
product (FK)
price
quantity

生成的创建帖子操作如下:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "folio,date,customer")] Orders order)
{

if (ModelState.IsValid)
{
db.Orders.Add(order);
db.SaveChanges();
return RedirectToAction("Index");
}

ViewBag.cliente = new SelectList(db.CATCTES, "COD_CTE", "NOM_CTE", order.cliente);

return View(order);
}

没关系,但我也需要插入到其他实体/表中!我已经更改了 Create.cshtml 表单,其中包含 Orders 表所需的字段并包括某种用于 OrdersDetail 的网格。每行都是 OrdersDetail 表的一个新条目。

enter image description here

问题是我不知道如何在 Orders Controller 的 Create 操作中正确地保存到另一个表。如果这不是正确的方法,请告诉我您的意见。 p>

另一个问题是关于 POSTing,我应该如何命名要正确分组的输入并在 Controller 中使用提交的值?当我单击表单上的“+”按钮时,每一行都由该脚本生成:

@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
<script>
function add_row() {
var detalle = $('#detalle');
var newRow = '<tr>' +
'<td data-title="Product">' +
'<div class="input-group">' +
'<span class="input-group-addon"></span>' +
'<input class="form-control" type="number" aria-label="Product" name="detail_array[].product" step="0.001" min="0.000" onchange="cambiar_importe(this)" required="true">' +
'</div>' +
'</td>' +
'<td data-title="Price" >' +
'<div class="input-group">' +
'<span class="input-group-addon">$</span>' +
'<input type="number" class="form-control" aria-label="Price" name="detail_array[].price" onchange="cambiar_importe(this)" step="0.001" min="0.000" required="true">' +
'</div>' +
'</td>' +
'<td data-title="Quantity">' +
'<div class="input-group">' +
'<span class="input-group-addon">$</span>' +
'<input type="text" class="importe form-control" aria-label="Quantity" name="detail_array[].quantity" step="0.001" min="0.000" readonly="true" >' +
'</div>' +
'</td>' +
'<td data-title=""><button type="button" class="btn btn-danger btn-sm" onclick="borrar_renglon(this)">Cancelar</button></td>' +
'</tr>';

detalle.append(newRow);
}

</script>
}

最佳答案

我认为您应该使用 Ajax。

在您的 View 中,您有网格部分,每次添加记录时,您都必须使用 Ajax 发布表单将值发布到服务器:

@using (Ajax.BeginForm("AddDetails", new AjaxOptions { UpdateTargetId = "gridContainerElementId" }))
{
@Html.HiddenFor(m => m.folio)
@Html.HiddenFor(m => m.product)
@Html.TextBox(m => m.price)
@Html.TextBox(m => m.quantity)
<input type = "submit" value = "Save"/>
}

注意:将您的网格放在“gridContainerElementId”div 中,例如:

<div id="gridContainerElementId">
@Html.Action("DetailsGridPartial", new { OrderId = Model.folio })
</div>

在你的 Controller 中

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult AddDetails(OrdersDetail orderDetails)
{
if (ModelState.IsValid)
{
db.OrdersDetail.Add(orderDetails);
db.SaveChanges();

return RedirectToAction("DetailsGridPartial", new { OrderId = orderDetails.folio });
}
return View(order);
}

public ActionResult DetailsGridPartial(int OrderId)
{
var orderDetails = db.OrdersDetail.Where(w => w.folio == OrderId);
return PartialView(orderDetails);
}

您需要创建新 View 来显示网格:

@model IEnumerable<OrdersDetail>
@Html.YourHelper.Grid(model).Html() @*or however you build the grid*@

在这种情况下,您不需要通过新记录手动填充网格,网格会自动刷新。

希望对你有帮助

关于c# - 如何在 ASP.NET MVC 5 中插入主从表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33190604/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com