模型foreach循环中的MVC 4 NullReferenceExcpetion

时间:2012-10-10 13:54:55

标签: c# asp.net-mvc

我遇到IEnumerable的foreach循环问题

功能Get_Contacts_By_Company_ID

public List<Contact> Get_Contacts_By_Company_ID(string company_id)
    {
        List<Contact> contacts = new List<Contact>();


        foreach (DataRow contacts_row in contacts_da.Get_Contacts_By_Company_ID(company_id).Rows)
        {
            Contact contact = new Contact();

            contact.Contact_ID = contacts_row["Contact_ID"].ToString();
            contact.Contact_Is_Active = Convert.ToInt32(contacts_row["Is_Active"].ToString());
            contact.Firstname = contacts_row["Firstname"].ToString();
            contact.Middlename = contacts_row["Middlename"].ToString();
            contact.Lastname = contacts_row["Lastname"].ToString();
            contact.Contact_Address = contacts_row["Address"].ToString();
            contact.Contact_City_Province = contacts_row["City_Province"].ToString();
            contact.Contact_State = contacts_row["State"].ToString();
            contact.Contact_ZIP = contacts_row["ZIP"].ToString();
            contact.Contact_Phone = contacts_row["Phone"].ToString();
            contact.Contact_Mobile_Phone = contacts_row["Mobile_Phone"].ToString();

            contacts.Add(contact);

        }


        return contacts;
    }

contacts_da.Get_Contacts_By_Company_ID函数将只返回一个DataTable

控制器:

 [Authorize]
    public ActionResult Edit(string id)
    {

        List<Contact> contacts = new List<Contact>();

        Contact contact = new Contact();

        contacts = contact.Get_Contacts_By_Company_ID(id);

        return View(contacts);
    }

    [HttpPost]
    public ActionResult Edit(List<Contact> contact)
    {

        List<Contact> contacts = contact;

        //company.Update_Company(company_model);

        return View();
    }

查看:

@model IEnumerable<DTIMS_BL.Contact>
@using (Html.BeginForm("Edit/" + Model, "Company", FormMethod.Post))
{
@foreach (var item in Model)
{
<table>
  <tr>
     <td>
       @Html.DisplayFor(m => item.Firstname)                      

        </td>
        <td>
          @Html.ActionLink("Remove", "", new { @class = "btn small fr" })
         </td>
          <td>
           @Html.ActionLink("Edit", "", new { @class = "btn small fr" })
          </td>
      </tr>
</table>
  } 
<button class="fr submit">Save Company Details</button>
}

当我点击提交表单的“保存公司详细信息”按钮时,问题就开始了。我收到“NullReferenceException”。我在这里错过了什么。请帮忙。

3 个答案:

答案 0 :(得分:1)

@using (Html.BeginForm("Edit", "Company", FormMethod.Post))

而不是

@using (Html.BeginForm("Edit/" + Model, "Company", FormMethod.Post))

答案 1 :(得分:0)

如果table为null,则可以为check DataTable value添加此代码,返回空列表

List<Contact> Get_Contacts_By_Company_ID(string company_id)
{
      List<Contact> contacts = new List<Contact>();
      var table = contacts_da.Get_Contacts_By_Company_ID(company_id);
      if(table == null)
      {
         return contacts;
      }

      foreach (DataRow contacts_row in contacts_da.Get_Contacts_By_Company_ID(company_id).Rows)
      {
       ....
      }
}

答案 2 :(得分:0)

我假设其中一行中的一列是null。您应避免在此方案中使用ToString(),而是使用Convert.ToString()代替:

contact.Contact_ID = Convert.ToString(contacts_row["Contact_ID"]);
contact.Contact_Is_Active = Convert.ToInt32(contacts_row["Is_Active"]);
contact.Firstname = Convert.ToString(contacts_row["Firstname"]);
contact.Middlename = Convert.ToString(contacts_row["Middlename"]);
contact.Lastname = Convert.ToString(contacts_row["Lastname"]);
contact.Contact_Address = Convert.ToString(contacts_row["Address"]);
contact.Contact_City_Province = Convert.ToString(contacts_row["City_Province"]);
contact.Contact_State = Convert.ToString(contacts_row["State"]);
contact.Contact_ZIP = Convert.ToString(contacts_row["ZIP"]);
contact.Contact_Phone = Convert.ToString(contacts_row["Phone"]);
contact.Contact_Mobile_Phone = Convert.ToString(contacts_row["Mobile_Phone"]);