Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 根据交货对象的ID保存所选订单_Asp.net_Nullreferenceexception - Fatal编程技术网

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)
这是可行的,但如果有人不同意这种方式,并有更好的选择,请随时编辑此相应