我有Delivery Create View
,其中我选择Orders
添加到Delivery
。但是,它似乎不想在数据库中保存链接。 Delivery
被创建是因为我可以在那里看到它,如果我回到程序中,但问题在于让Orders
链接到Delivery
。
在我输入所有交货细节并选择了我想要的订单后,点击保存后,它一直在踢我。
当我尝试保存order.DeliveryID = delivery.DeliveryID;
并且错误消息是“HealthHabitat.dll中发生了类型'System.NullReferenceException的异常但未在用户代码中处理”时,问题似乎在于此行。我已经在谷歌上搜索了一下,但我不知道如何解决这个问题。
请记住,我是Asp.Net MVC的新手,所以任何帮助都将不胜感激!
这是我到目前为止所做的:
创建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 })
;
创建视图:
@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>
}
答案 0 :(得分:0)
确保您的订单&#39;在分配给&#39; order.DeliveryID&#39;。
之前,变量不为null答案 1 :(得分:0)
原来我的View
中的这一行是问题所在。
@Html.DisplayFor(m => m.Orders[i].ID)
我认为这是因为由于OrderID
属性,表单无法提取DisplayFor
。
所以我把它改成了:
@Html.HiddenFor(m => m.Orders[i].ID)
现在它有效。但是,现在我无法显示OrderID
。因此,我只是在上面的代码下面添加了相同的代码行,并将属性从HiddenFor
更改为DisplayFor
,现在它检索OrderID
并显示{{1所以我知道我正在选择哪一个。
OrderID
这有效,但如果有人不同意这种方式并有更好的选择,请随意编辑相应的