0

У меня есть приложение asp.net, которое имеет индексный вид, который пользователи могут изменять и сохранять. Однако, когда я нажимаю на кнопку сохранить, я получаю ошибку:ASP.NET MVC application throwing system.nullreferenceexception - modelbinding to list

Object reference not set to an instance of an object. 
System.NullReferenceException: Object reference not set to an instance of an object. 

Я сделал мою указательной страницу формы, которая имеет несколько флажков, и после того, как пользователь проверил от того, что им нужно, и нажмите сохранить его называет моим сохранить функцию.

Index.cshtml

<input type="button" onclick="$('#doctorform').submit();" value="Save" /> 

@using (Html.BeginForm("Index", "drnos", FormMethod.Post, new { id = "doctorform" })) 
{ 


for (int i = 0; i < Model.Count; i++) 
{ 

     <tr> 
      <td> 
       @Html.Hidden("drnos[" + @i + "].RVH_ID_", Model[i].AdmPriv) 
       @Model[@i].RVH_ID_ 

      </td> 
      <td> 
       @Html.Hidden("drnos[" + @i + "].Last_Name", Model[i].AdmPriv) 
       @Model[@i].Last_Name 
      </td> 
      <td> 
       @Html.Hidden("drnos[" + @i + "].First_Name", Model[i].AdmPriv) 
       @Model[@i].First_Name 
      </td> 
      <td> 
       @Html.Hidden("drnos[" + @i + "].Middle_Name", Model[i].AdmPriv) 
       @Model[@i].Middle_Name 
      </td> 
      <td> 
       @Html.Hidden("drnos[" + @i + "].Degree1", Model[i].AdmPriv) 
       @Model[@i].Degree1 
      </td> 
      <td> 
       @Html.Hidden("drnos[" + @i + "].Group", Model[i].AdmPriv) 
       @Model[@i].Group 
      </td> 
      <td> 
       @Html.CheckBox("drnos[" + @i + "].AdmPriv", Model[i].AdmPriv) 
      </td> 
      <td> 
       @Html.CheckBox("drnos[" + @i + "].QCPR", Model[i].QCPR) 
      </td> 
      <td> 
       @Html.CheckBox("drnos[" + @i + "].Keane", Model[i].Keane) 

      </td> 
      <td> 
       @Html.CheckBox("drnos[" + @i + "].Orsos", Model[i].Orsos) 

      </td> 
      <td> 
       @Html.CheckBox("drnos[" + @i + "].Soft", Model[i].Soft) 

      </td> 
      <td> 
       @Html.CheckBox("drnos[" + @i + "].C3M", Model[i].C3M) 
      </td> 


      <td> 
       @Html.ActionLink("Edit", "Edit", new { id = Model[@i].RVH_ID_ }) 
       @Html.ActionLink("Details", "Details", new { id = Model[@i].RVH_ID_ }) 

      </td> 
     </tr> 

     } 

     } 

drnosController.cs

[HttpPost] 
    public ActionResult Index(List<Doctor> drnos) 
    { 

     System.Diagnostics.Debug.WriteLine("Save Called"); 
     DrNOSv2Entities db = new DrNOSv2Entities(); 
     foreach (Doctor doc in drnos) 
     { 
      Doctor existing = db.Doctors.Find(doc.RVH_ID_); 
      existing.AdmPriv = doc.AdmPriv; 
      existing.QCPR = doc.QCPR; 
      existing.Keane = doc.Keane; 
      existing.Orsos = doc.Orsos; 
      existing.Soft = doc.Soft; 
      existing.C3M = doc.C3M; 
     } 
     db.SaveChanges(); 
     return View(); 
    } 

Модель

namespace drnosv6.Models 
{ 
    using System; 
    using System.Collections.Generic; 

public partial class Doctor 
{ 
    public int RVH_ID_ { get; set; } 
    public string NPI { get; set; } 
    public bool On_Staff { get; set; } 
    public bool AdmPriv { get; set; } 
    public bool Inactive { get; set; } 
    public string License_Verification_Date { get; set; } 
    public string Last_Name { get; set; } 
    public string First_Name { get; set; } 
    public string Middle_Name { get; set; } 
    public string Group { get; set; } 
    public string Address { get; set; } 
    public string City { get; set; } 
    public string Zip { get; set; } 
    public string State { get; set; } 
    public string Telephone { get; set; } 
    public string Fax { get; set; } 
    public string Phys_Spclty { get; set; } 
    public string License_ { get; set; } 
    public string UPIN { get; set; } 
    public bool QCPR { get; set; } 
    public bool Keane { get; set; } 
    public bool Orsos { get; set; } 
    public bool C3M { get; set; } 
    public bool Soft { get; set; } 
    public bool DIC { get; set; } 
    public bool Metalink { get; set; } 
    public bool Open_Med { get; set; } 
    public bool Muse { get; set; } 
    public bool MedQuest { get; set; } 
    public string Degree1 { get; set; } 
    public string Degree2 { get; set; } 
    public string Degree3 { get; set; } 
} 
} 

спасбросков метод вызывается, и программа падает на линии:

existing.AdmPriv = doc.AdmPriv; 

Может кто-то помочь мне понять, почему это не будет заходящего экземпляр ? Благодаря!

EDIT

Ok поэтому я решил выписать значения внутри моего сохранения функции, и это выглядит как моя форма не возвращает правильные значения для каждой строки. Он возвращает кучу 0 и фальши. Мне интересно, что-то не так с моей формой в индексе?

+2

есть null – aw04

+0

Что я могу сделать, чтобы исправить это? Похоже, моя форма возвращает нули по какой-то причине – BrittB

+0

Вы уверены? Ошибка в том, что существующий врач не найден, проблема doc.RVH_ID_ равна нулю или она отсутствует в вашем db? – aw04

ответ

0
Replace foreach statement block like below: 
    Doctor existing = db.Doctors.Find(doc.RVH_ID_); 
    if (existing != null) 
    {    
       existing.AdmPriv = doc.AdmPriv; 
       existing.QCPR = doc.QCPR; 
       existing.Keane = doc.Keane; 
       existing.Orsos = doc.Orsos; 
       existing.Soft = doc.Soft; 
       existing.C3M = doc.C3M; 
    } 
    } 
+0

Теперь это прошло, но он дает ту же ошибку на 'или (int i = 0; i BrittB

+1

@BrittB в конце вашего действия POST, которое вы вызываете 'return View();' Вы не передаете свою модель в вид. –

0

Похоже, у вас новый врач, которого нет в базе данных.

Проверьте обратный вызов от получения врачами в базе данных для нулей.