将对象列表从视图传递到控制器时发生NullReferenceException

问题描述

我试图将对象列表从视图保存到控制器,但是当list大于25时我得到了NullReferenceException。如果list小于25则可以正常工作。

public async Task<IActionResult> ImportStudentExcel(IFormFile file)
{
 var list = new List<StudentImport>();
//Here it contains logic for adding item to list from excel file
ViewBag.FileName = file.FileName;
return View(list.ToList());
}

我正在查看所有项目 我这样做是为了绑定属性

  //Containes Table for Showing List
  <form id="saveForm" asp-action="SaveFromImport" asp-controller="StudentImport" method="POST">
  <input type="hidden" name="filename" value="@ViewBag.FileName">
  @for(int i=0; i<Model.Count; i++)
      {
        <input asp-for="@Model[@i].Fullname" type="hidden" value="@Model[@i].Fullname"/>
        <input asp-for="@Model[@i].Gender" type="hidden" value="@Model[@i].Gender"/>
        <input asp-for="@Model[@i].dob" type="hidden" value="@Model[@i].dob"/>
         // Other 15 Properties Like Address,PhoneNumber,RegNo etc
      }
    <input type="submit" value="Save">
   </form>

当我检查此页面时,所有项目都存在

public async Task<IActionResult> SaveFromImport(List<StudentImport> students,string filename)
        {
            try
            {
                foreach (var t in students)
                {
                   
                    System.Console.WriteLine(t.Fullname);
                    //Save to DB
                }
             }
            catch (Exception e)
            {
                System.Console.WriteLine(e.ToString());
                

            }
            return RedirectToAction("Index","Student");
        }

我在foreach语句中获得了NullReference。我不知道怎么回事。当列表计数为13时,它可以按预期工作,但当计数为25或更大时,它将不起作用。当StudentImportModel中只有一个属性并且计数为sttil时,它也可以工作。

解决方法

在我的情况下,ExceptionMessage为NullReferenceException,但实际错误为InvalidDataException:超出了表单值计数限制1024。 但是,我设法通过在ConfigureServices方法中添加此代码来解决了这个问题。

 services.Configure<FormOptions>(options =>
    {
        options.ValueCountLimit = 6000;
    });