Click here to Skip to main content
15,887,027 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
problem
i get error on edit action result when save data using asp.net core 2.1 ?
error on line
foreach (var Footer in Header.SalesFooters)

on sales footer is null
why and how to solve error ?
System.NullReferenceException
HResult=0x80004003
Message=Object reference not set to an instance of an object.
Source=WebTabCore
StackTrace:
at WebTabCore.Controllers.SalesOrderController.Edit(SalesHeader Header) in D:\TABWebCore\WebTabCore\WebTabCore\Controllers\SalesOrderController.cs:line 72
at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters)
at Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.SyncActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeActionMethodAsync>d__12.MoveNext()

so how to solve this problem please ?


What I have tried:

<table class="table">
                <thead>
                    <tr>
                        <th>
                            @Html.DisplayNameFor(model => model.SalesFooters.FirstOrDefault().SalesOrderNo)
                        </th>
                        <th>
                            @Html.DisplayNameFor(model => model.SalesFooters.FirstOrDefault().ItemCode)
                        </th>
                        
                         
                       
                        <th></th>
                    </tr>
                </thead>
                <tbody>
                    @foreach (var item in Model.SalesFooters)
                    {
                    <tr>
                        <td>
                            @Html.EditorFor(modelItem => item.SalesOrderNo)
                        </td>
                        <td>
                            @Html.EditorFor(modelItem => item.ItemCode)
                        </td>
                       
                     
                    </tr>
                    }
                </tbody>
            </table>
[HttpPost]
        [ValidateAntiForgeryToken]
        public IActionResult Edit(SalesHeader Header)
        {
            if (ModelState.IsValid)
            {
                _repositoryHeader.Update(Header);

                foreach (var Footer in Header.SalesFooters)
                    _repositoryFooter.Update(Footer);

                db.SaveChanges();

                return RedirectToAction("Index");
            }
            return View(Header);
        }
Posted
Updated 14-Feb-19 3:16am

1 solution

Model Binding To A List | You’ve Been Haacked[^]

Change the loop in your view to a for loop:
<tbody>
@for (int i = 0; i < Model.SalesFooters.Count; i++)
{
    <tr>
        <td>
            @Html.EditorFor(m => m.SalesFooters[i].SalesOrderNo)
        </td>
        <td>
            @Html.EditorFor(m => m.SalesFooters[i].ItemCode)
        </td>
    </tr>
}
</tbody>
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900