ahmed_sa Ответов: 1

Ошибка в сохранении данных при нажатии на кнопку Создать для сохранения нижнего колонтитула


Проблема

при сохранении данных из контроллера при нажатии кнопки создать для сохранения я получаю ошибку

При обработке запроса возникло необработанное исключение.
NullReferenceException: ссылка на объект не установлена на экземпляр объекта.
WebTabCore.Контроллеры.SalesOrderController.Create(SalesHeader sh) в файле SalesOrderController.cs, строка 37

Заголовки Файлов Cookie Запроса Стека
NullReferenceException: ссылка на объект не установлена на экземпляр объекта.
WebTabCore.Контроллеры.SalesOrderController.Создать(SalesHeader sh) в SalesOrderController.cs
+
foreach (var i in sh.Коммивояжеры)

Данные заголовка не имеют никаких проблем

Модель используется для сохранения

public class SalesHeader
        {
        public int SalesOrderNo { get; set; }
        public int SalesYear { get; set; }
        public int BranchCode { get; set; }
        public int SalesType { get; set; }
        public DateTime SalesDate { get; set; }
        public int CustomerID { get; set; }
        public Customer Customers { get; set; }
        public ICollection<salesfooter> SalesFooters { get; set; }
        public decimal TotalPrice { get; set; }
         }
on create view i add items to list as following

 if (isValidItem) {
                orderItems.push({
                    SalesLineNo: $('#SalesLineNo').val().trim(),
                    ItemCode: $('#ItemCode').val().trim(),
                    Quantity: parseInt($('#Qunatity').val().trim()),
                    UnitPrice: parseFloat($('#UnitPrice').val().trim()),
                    Total: parseInt($('#Qunatity').val().trim()) * parseFloat($('#UnitPrice').val().trim())
                });
when save data i use as following

I assign on code below

SalesFooters: orderItems

  //save data
    $('#submit').click(function () {
        //validation of order
        var isAllValid = true;
        if (orderItems.length == 0) {
            $('#orderItems').html('<span style="color:red;">Please add order items</span>');
            isAllValid = false;
        }

        
        //Save if valid
        if (isAllValid) {
            var data = {
                SalesOrderNo: $('#SalesOrderNo').val().trim(),
                SalesYear: $('#SalesYear').val().trim(),
                BranchCode: $('#BranchCode').val().trim(),
                SalesType: $('#SalesType').val().trim(),
                SalesDate: $('#SalesDate').val().trim(),
                CustomerID: $('#CustomerID').val().trim(),
                TotalPrice: $('#TotalPrice').val().trim(),
                SalesFooters: orderItems
            }

            $(this).val('Please wait...');

            $.ajax({
                url: '/SalesOrder/Create',
                type: "POST",
                data: JSON.stringify(data),
                dataType: "JSON",
                contentType: "application/json",
                success: function (d) {
                    //check is successfully save to database 
                    if (d.status == true) {
                        //will send status from server side
                        alert('Successfully done.');
                        //clear form
                        orderItems = [];
                        $('#SalesOrderNo').val('');
                        $('#SalesYear').val('');
                        $('#BranchCode').val('');
                        $('#SalesType').val('');
                        $('#SalesDate').val('');
                        $('#CustomerID').val('');
                        $('#TotalPrice').val('');
                        $('#orderItems').empty();
                    }
                    else {
                        alert('Failed');
                    }
                    $('#submit').val('Save');
                },
                error: function () {
                    alert('Error. Please try again.');
                    $('#submit').val('Save');
                }
            });


Что я уже пробовал:

[HttpPost]
        public JsonResult Create(SalesHeader sh)
        {
            bool status = false;
            if (ModelState.IsValid)
            {
              
                    SalesHeader order = new SalesHeader { SalesOrderNo = sh.SalesOrderNo, SalesType = sh.SalesType, BranchCode = sh.BranchCode,SalesYear=sh.SalesYear,SalesDate=sh.SalesDate,CustomerID=sh.CustomerID };
                    foreach (var i in sh.SalesFooters) here exception done
                    {
                    SalesFooter sf = new SalesFooter();
                    sf.SalesLineNo = i.SalesLineNo;
                    sf.ItemCode = i.ItemCode;
                    sf.Quantity = i.Quantity;
                    sf.UnitPrice = i.UnitPrice;
                    sf.Total = i.Total;
                    
                        order.SalesFooters.Add(i);
                    }
                _repository.Insert(order);
                status = true;

              

            }
            else
            {
                status = false;
               
            }
           
            return Json (sh);
        }

1 Ответов

Рейтинг:
2

Bohdan Stupak

Существует проблема в .net core при передаче сложного объекта по проводу
Обходной путь заключается в использовании [FromBody]

public JsonResult Create([FromBody] SalesHeader sh)

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