Asp.net 根据交货对象的ID保存所选订单
我有一个Asp.net 根据交货对象的ID保存所选订单,asp.net,nullreferenceexception,Asp.net,Nullreferenceexception,我有一个Delivery Create视图,在该视图中我选择Orders添加到Delivery。但是,它似乎不想在数据库中保存链接。创建Delivery是因为如果我回到程序中,我可以在那里看到它,但问题在于让订单链接到Delivery 在输入了所有交货详细信息并选择了我想要的订单后,当我单击“保存”时,它会一直将我踢出 当我试图保存order.DeliveryID=delivery.DeliveryID时,问题似乎在于这一行,错误消息为“HealthHabitat.dll中发生了“System.
Delivery Create视图
,在该视图中我选择Orders
添加到Delivery
。但是,它似乎不想在数据库中保存链接。创建Delivery
是因为如果我回到程序中,我可以在那里看到它,但问题在于让订单链接到Delivery
在输入了所有交货详细信息并选择了我想要的订单后,当我单击“保存”时,它会一直将我踢出
当我试图保存order.DeliveryID=delivery.DeliveryID时,问题似乎在于这一行代码>,错误消息为“HealthHabitat.dll中发生了“System.NullReferenceException”类型的异常,但未在用户代码中处理”。我在谷歌上搜索了一下这个问题,但我不知道如何解决我的情况
请记住,我是Asp.NETMVC的新手,所以非常感谢您的帮助
这就是我到目前为止所做的:
创建POST方法:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(DeliveryVM model)
{
Delivery delivery = new Delivery()
{
DriverID = model.DriverID,
Dispatched_Date = DateTime.Now,
Dispatched_Time = DateTime.Now
};
db.Deliverys.Add(delivery);
db.SaveChanges();
// save the selected orders based on the ID of the Delivery object
IEnumerable<int> selectedOrders = model.Orders.Where(o => o.IsSelected).Select(o => o.ID);
foreach (int ID in selectedOrders)
{
Order order = db.Orders.Where(o => o.OrderID == ID).FirstOrDefault();
order.DeliveryID = delivery.DeliveryID;
db.Entry(order).State = EntityState.Modified;
}
db.SaveChanges();
return RedirectToAction("Details", new { id = delivery.DeliveryID })
;
[HttpPost]
[ValidateAntiForgeryToken]
公共操作结果创建(DeliveryVM模型)
{
交货期=新交货期()
{
DriverID=model.DriverID,
调度日期=日期时间。现在,
调度时间=日期时间。现在
};
db.delivers.Add(交货);
db.SaveChanges();
//根据交货对象的ID保存所选订单
IEnumerable selectedOrders=model.Orders.Where(o=>o.IsSelected.Select)(o=>o.ID);
foreach(选定顺序中的整数ID)
{
Order Order=db.Orders.Where(o=>o.OrderID==ID).FirstOrDefault();
order.DeliveryID=delivery.DeliveryID;
db.Entry(order).State=EntityState.Modified;
}
db.SaveChanges();
return RedirectToAction(“Details”,new{id=delivery.DeliveryID})
;
创建视图:
@for (int i = 0; i < Model.Orders.Count; i++)
{
<tr>
<td style="width:auto">
@Html.DisplayFor(m => m.Orders[i].ID)
</td>
<td style="width:auto">
@Html.LabelFor(m => m.Orders[i].IsSelected, Model.Orders[i].Name,htmlAttributes: new { @class = "control-label col-md-2" })
</td>
<td style="width:auto">
@Html.CheckBoxFor(m => m.Orders[i].IsSelected, new { htmlAttributes = new { @class = "form-control" } })
</td>
</tr>
}
@for(int i=0;im.Orders[i].ID)
@Html.LabelFor(m=>m.Orders[i].IsSelected,Model.Orders[i].Name,htmlAttributes:new{@class=“control label col-md-2”})
@CheckBoxFor(m=>m.Orders[i].IsSelected,new{htmlAttributes=new{@class=“form control”})
}
在分配给“order.DeliveryID”之前,请确保您的“order”变量不为null。我的视图中的这一行是问题所在
@Html.DisplayFor(m => m.Orders[i].ID)
我想这是因为表单无法提取OrderID
,因为DisplayFor
属性
所以我把它改成:
@Html.HiddenFor(m => m.Orders[i].ID)
现在它可以工作了。但是,现在我不能显示OrderID
。因此,作为响应,我只是在上面的代码下面添加了相同的代码行,并将属性从HiddenFor
更改为DisplayFor
,现在它检索OrderID
,并显示OrderID
,这样我就知道我要的是哪个了我选择
@Html.HiddenFor(m => m.Orders[i].ID)
@Html.DisplayFor(m => m.Orders[i].ID)
这是可行的,但如果有人不同意这种方式,并有更好的选择,请随时编辑此相应