2015-08-31 3 views
0

У меня есть Delivery Create View, в котором я выбираю Orders, чтобы добавить к этому Delivery. Однако, похоже, он не хочет сохранять ссылку в базе данных. Создается Delivery, потому что я могу видеть его там, если я вернусь в программу, но проблема заключается в получении Orders для ссылки на этот Delivery.Сохранение выбранных заказов на основании идентификатора объекта доставки

Он продолжает бить меня, когда я нажимаю кнопку «Сохранить» после того, как все данные для доставки введены, и выбранные мной заказы были выбраны.

Проблема, похоже, связана с этой строкой, когда я пытаюсь сохранить order.DeliveryID = delivery.DeliveryID;, и сообщение об ошибке «Исключение типа« Исключение System.NullReferenceException »произошло в HealthHabitat.dll, но не было обработано в коде пользователя». Я немного поработал над этим, но я не уверен, как это исправить в отношении моей ситуации.

Пожалуйста, учтите, что я довольно новичок в 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

Оказалось, что эта строка в моей View была проблемой.

@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) 

Это работает, но если кто-то не согласен с этим способом и имеет лучшую альтернативу, пожалуйста, не стесняйтесь редактировать это соответственно

0

Убедитесь, что переменная 'порядок' не равно нулю перед назначением на «order.DeliveryID».

Смежные вопросы