如何解决提交后删除网址ID? ASP.NET/实体框架
我有一个程序,允许用户添加和确认订单。一页上有所有订单(已确认和未确认)的表。每个订单位于表的每一行上,并且每个订单行都有一个“确认订单”按钮,单击该按钮会将用户重定向到新视图,然后用户可以在其中添加此特定订单的详细信息-单个订单可以包含多行,最终所有行构成一个订单。订单中的每一行都有产品名称,数量,价格和供应商-用户使用位于开始表中的输入来选择其中三个属性(产品名称,数量和供应商)。
我做了什么:
我正在使用onclick location.href事件将点击的按钮ID传递给相关的操作结果:
onclick="location.href = '@Url.Action("ConfirmOrderPage","Home",new { id = order.OrderID })'"
order.OrderID是使用foreach循环创建的,该循环为每个“确认订单”按钮动态分配一个ID-因此,单击的按钮的ID将成为用户希望确认的订单的ID。
以下操作结果是将ID发送到的位置:
public ActionResult ConfirmOrderPage(int id)
{
//Disable Lazy Loading
DBAccessor.Configuration.ProxyCreationEnabled = false;
//Clear list
confirmedOrder.Clear();
//Create dyanmic object reader that includes all related attributes
var confirmedDynamicReader = DBAccessor.OrderLine.Where(bb => bb.OrderID == id).Include(zz => zz.Product).Include(aa => aa.Supplier);
foreach (var confirmedOrderItem in confirmedDynamicReader)
{
//Load relevant attributes into view order table
ConfirmOrderLineViewModel DisplayConfirmedOrders = new ConfirmOrderLineViewModel();
DisplayConfirmedOrders.OrderID = confirmedOrderItem.OrderID;
DisplayConfirmedOrders.ProductID = confirmedOrderItem.Product.ProductID;
DisplayConfirmedOrders.ProductName = confirmedOrderItem.Product.Name;
DisplayConfirmedOrders.Quantity = confirmedOrderItem.Quantity;
DisplayConfirmedOrders.Price = confirmedOrderItem.Product.Price;
DisplayConfirmedOrders.SupplierID = confirmedOrderItem.Supplier.SupplierID;
DisplayConfirmedOrders.SupplierName = confirmedOrderItem.Supplier.Name;
confirmedOrder.Add(DisplayConfirmedOrders);
}
//Return orderList with fetched attributes
return View(confirmedOrder);
}
我正在LINQ表达式中使用传递的ID来告诉DBAccessor我们当前正在使用哪个顺序。然后,通过创建视图模型的对象(ConfirmOrderLineViewModel),将视图模型属性与SQL数据库中找到的属性相关联。
此外,我将列表“ confirmedOrder”返回到视图-此列表是全局创建的,可以在下面看到:
public static List<ConfirmOrderLineViewModel> confirmedOrder = new List<ConfirmOrderLineViewModel>();
第二,我正在使用其他操作结果将传递的输入值(从begin表单)分配给数据库属性,此后,我将重定向到上面看到的视图:
[HttpPost]
public ActionResult SendOrderActionFinal(int id,int Product,int Quantity,int Supplier)
{
OrderLine newOrderLine = new OrderLine();
newOrderLine.OrderID = id;
newOrderLine.ProductID = Product;
newOrderLine.Quantity = Quantity;
newOrderLine.SupplierID = Supplier;
DBAccessor.OrderLine.Add(newOrderLine);
DBAccessor.SaveChanges();
return RedirectToAction("ConfirmOrderPage");
}
最后,从我的观点可以看出,我正在使用一个HTML开头表单以及几个HTML帮助程序来获取用户输入,一旦提交表单,这些输入就可以发送到操作结果。 / p>
我的开始表格如下:
<div class="confirmOrderLineItem">
@using (Html.BeginForm("SendOrderActionFinal",new { id = Url.RequestContext.RouteData.Values["id"] },FormMethod.Post))
{
var currentOrder = Url.RequestContext.RouteData.Values["id"];
<div class="jumbotron">
<h1>Confirm Order</h1>
<p class="lead">Viewing Order Number: @currentOrder</p>
</div>
<label>Product</label>
@Html.DropDownList("Product",ViewBag.ProductList as SelectList,"Select Product",new { @class = "form-control",required = "required" })
<br />
<label>Quantity</label>
@Html.TextBox("Quantity",null,@type = "number",required = "required",min = 1 });
<br />
<label>Supplier</label>
@Html.DropDownList("Supplier",ViewBag.SupplierList as SelectList,"Select Supplier",@id = "Supplier" })
<br />
<button class="btn btn-success" type="submit" id="insertOrderBtn">Insert</button><button class="btn btn-primary" type="submit">Send Order</button>
}
</div>
在开始表单的底部,您可以看到有两个提交按钮,一个名为“插入”,另一个名为“发送订单”-单击“插入”时,当前输入的输入(在开始表单中) )应如下所示添加到表中,而无需对数据库本身进行任何提交(用户应能够返回主视图,并且表应完全丢弃)。但是,当单击“发送订单”时,整个表的内容需要提交到数据库。
表格:
<table class="table">
<thead class="thead-dark">
<tr>
<th scope="col">Product</th>
<th scope="col">Quantity</th>
<th scope="col">Price (R)</th>
<th scope="col">Supplier</th>
</tr>
</thead>
<tbody>
@foreach (U18043039_HW6.ViewModels.ConfirmOrderLineViewModel confirmedOrder in Model)
{
<tr>
<th>@confirmedOrder.ProductName</th>
<td>@confirmedOrder.Quantity</td>
<td>@confirmedOrder.Price</td>
<td>@confirmedOrder.SupplierName </td>
</tr>
}
</tbody>
</table>
我的问题是:
每当我单击“插入”或“发送订单”时,都会遇到“ //应用程序中的服务器错误”错误-说“参数字典包含参数'id'为null的null项。方法'System.Web.Mvc.ActionResult ConfirmOrderPage(Int32)'的-nullable类型'System.Int32''表示一旦提交表单,发送给ConfirmOrderPage ActionResult的id值将变为null。为什么会这样呢?订单确实提交到数据库,并且表已更新-但是,仅当我自己返回并刷新页面时。
解决方法
return RedirectToAction("ConfirmOrderPage");
缺少对象RouteValues
尝试return RedirectToAction("ConfirmOrderPage",new { id = id });
由于您的ActionResult ConfirmOrderPage需要一个int参数
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。