C# 如何在foreach循环中处理NullReferenceException?

C# 如何在foreach循环中处理NullReferenceException?,c#,asp.net,model-view-controller,foreach,nullreferenceexception,C#,Asp.net,Model View Controller,Foreach,Nullreferenceexception,我总是得到这个错误代码。我知道是什么问题,但我不知道为什么。我猜我的模型是空的,但在我看来,它不是空的。 错误代码: 处理请求时发生未处理的异常。 NullReferenceException:对象引用未设置为对象的实例 这里有点问题:@foreach(模型中的var-emp) 我的看法是: @model IEnumerable<CRUDDemo.Models.EmployeeInfo> @{ ViewData["Title"] = "Index"; Layout =

我总是得到这个错误代码。我知道是什么问题,但我不知道为什么。我猜我的模型是空的,但在我看来,它不是空的。 错误代码:

处理请求时发生未处理的异常。 NullReferenceException:对象引用未设置为对象的实例

这里有点问题:
@foreach(模型中的var-emp)

我的看法是:

@model IEnumerable<CRUDDemo.Models.EmployeeInfo>
@{
    ViewData["Title"] = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h1>Index</h1>

<p>
    <a asp-action="Create">Create New</a>
</p>

@*For Display Employee Info*@
<table class="table table-striped">
    <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.Name)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Gender)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Company)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Department)
            </th>
        </tr>
    </thead>
    <tbody>
        @foreach(var emp in Model)
        {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => emp.Name)
            </td>
            <td>
                @Html.DisplayFor(modelItem => emp.Gender)
            </td>
            <td>
                @Html.DisplayFor(modelItem => emp.Company)
            </td>
            <td>
                @Html.DisplayFor(modelItem => emp.Department)
            </td>
            <td>
                <a asp-action="Edit" asp-route-id="@emp.ID">Edit</a>
                <a asp-action="Details" asp-route-id="@emp.ID">Details</a>
                <a asp-action="Delete" asp-route-id="@emp.ID">Delete</a>
            </td>
        </tr>
        }
    </tbody>
</table>
@model IEnumerable
@{
ViewData[“标题”]=“索引”;
Layout=“~/Views/Shared/_Layout.cshtml”;
}
指数

创造新的

@*用于显示员工信息*@ @DisplayNameFor(model=>model.Name) @DisplayNameFor(model=>model.Gender) @DisplayNameFor(model=>model.Company) @DisplayNameFor(model=>model.Department) @foreach(模型中的var emp) { @DisplayFor(modeleItem=>emp.Name) @DisplayFor(modeleItem=>emp.Gender) @DisplayFor(modeleItem=>emp.Company) @DisplayFor(modelItem=>emp.Department) 编辑 细节 删去 }
我的模型:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Threading.Tasks;

namespace CRUDDemo.Models
{
    public class EmployeeDAL
    {
        string connectionString = "Data Source=LENOVOL470\\SQLEXPRESS;Initial Catalog=EMPLOYEEDB;Persist Security Info=False;User ID=sa;password=123;";

        //Get All
        public IEnumerable<EmployeeInfo> GetAllEmployee()
        {
            List<EmployeeInfo> empList = new List<EmployeeInfo>();

            using (SqlConnection con = new SqlConnection(connectionString))
            {
                SqlCommand cmd = new SqlCommand("SP_GetAllEmployee", con);
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                con.Open();
                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    EmployeeInfo emp = new EmployeeInfo();
                    emp.ID = Convert.ToInt32(dr["ID"].ToString());
                    emp.Name = dr["Name"].ToString();
                    emp.Gender = dr["Gender"].ToString();
                    emp.Company = dr["Company"].ToString();
                    emp.Department = dr["Department"].ToString();

                    empList.Add(emp);
                }
                con.Close();
            }
            return empList;
        }

        //To Insert Employee
        public void AddEmployee(EmployeeInfo emp)
        {
            using (SqlConnection con = new SqlConnection(connectionString))
            {
                SqlCommand cmd = new SqlCommand("SP_InsertEmployee", con);
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.AddWithValue("@Name", emp.Name);
                cmd.Parameters.AddWithValue("@Gender", emp.Gender);
                cmd.Parameters.AddWithValue("@Company", emp.Company);
                cmd.Parameters.AddWithValue("@Department", emp.Department);

                con.Open();
                cmd.ExecuteNonQuery();
                con.Close();
            }
        }

        //To Update Employee
        public void UpdateEmployee(EmployeeInfo emp)
        {
            using (SqlConnection con = new SqlConnection(connectionString))
            {
                SqlCommand cmd = new SqlCommand("SP_UpdateEmployee", con);
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.AddWithValue("@EmpId", emp.ID);
                cmd.Parameters.AddWithValue("@Name", emp.Name);
                cmd.Parameters.AddWithValue("@Gender", emp.Gender);
                cmd.Parameters.AddWithValue("@Company", emp.Company);
                cmd.Parameters.AddWithValue("@Department", emp.Department);

                con.Open();
                cmd.ExecuteNonQuery();
                con.Close();
            }
        }

        //To Delete Employeee
        public void DeleteEmployee(int? empId)
        {
            using (SqlConnection con = new SqlConnection(connectionString))
            {
                SqlCommand cmd = new SqlCommand("SP_DeleteEmployee", con);
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.AddWithValue("@EmpId", empId);

                con.Open();
                cmd.ExecuteNonQuery();
                con.Close();
            }
        }

        //Get Employee by ID
        public EmployeeInfo GetEmployeeById(int? empId)
        {
            EmployeeInfo emp = new EmployeeInfo();

            using (SqlConnection con = new SqlConnection(connectionString))
            {
                SqlCommand cmd = new SqlCommand("SP_GetEmployeeById", con);
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@EmpId", empId);
                con.Open();
                SqlDataReader dr = cmd.ExecuteReader();
                while(dr.Read())
                {
                    emp.ID = Convert.ToInt32(dr["ID"].ToString());
                    emp.Name = dr["Name"].ToString();
                    emp.Gender = dr["Gender"].ToString();
                    emp.Company = dr["Company"].ToString();
                    emp.Department = dr["Department"].ToString();
                }
                con.Close();
            }
            return emp;
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用系统数据;
使用System.Data.SqlClient;
使用System.Linq;
使用System.Threading.Tasks;
命名空间CRUDDemo.Models
{
公共阶层雇员
{
string connectionString=“数据源=LENOVOL470\\SQLEXPRESS;初始目录=EMPLOYEEDB;持久安全信息=False;用户ID=sa;密码=123;”;
//全部
公共IEnumerable GetAllEmployee()
{
List empList=新列表();
使用(SqlConnection con=newsqlconnection(connectionString))
{
SqlCommand cmd=新的SqlCommand(“SP_GetAllEmployee”,con);
cmd.CommandType=System.Data.CommandType.StoredProcess;
con.Open();
SqlDataReader dr=cmd.ExecuteReader();
while(dr.Read())
{
EmployeeInfo emp=新的EmployeeInfo();
emp.ID=Convert.ToInt32(dr[“ID”].ToString());
emp.Name=dr[“Name”].ToString();
emp.Gender=dr[“Gender”].ToString();
emp.Company=dr[“Company”].ToString();
emp.Department=dr[“Department”].ToString();
雇主添加(emp);
}
con.Close();
}
返回雇主;
}
//插入雇员
公共无效添加员工(员工信息emp)
{
使用(SqlConnection con=newsqlconnection(connectionString))
{
SqlCommand cmd=新的SqlCommand(“SP_InsertEmployee”,con);
cmd.CommandType=CommandType.storedProcess;
cmd.Parameters.AddWithValue(“@Name”,emp.Name);
cmd.Parameters.AddWithValue(“@Gender”,emp.Gender);
cmd.Parameters.AddWithValue(“@Company”,emp.Company);
cmd.Parameters.AddWithValue(“@Department”,emp.Department);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
//更新员工
公共无效更新员工(员工信息emp)
{
使用(SqlConnection con=newsqlconnection(connectionString))
{
SqlCommand cmd=新的SqlCommand(“SP_UpdateEmployee”,con);
cmd.CommandType=CommandType.storedProcess;
cmd.Parameters.AddWithValue(“@EmpId”,emp.ID);
cmd.Parameters.AddWithValue(“@Name”,emp.Name);
cmd.Parameters.AddWithValue(“@Gender”,emp.Gender);
cmd.Parameters.AddWithValue(“@Company”,emp.Company);
cmd.Parameters.AddWithValue(“@Department”,emp.Department);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
//删除雇员
公共无效删除员工(int?empId)
{
使用(SqlConnection con=newsqlconnection(connectionString))
{
SqlCommand cmd=新的SqlCommand(“SP_deletemployee”,con);
cmd.CommandType=CommandType.storedProcess;
cmd.Parameters.AddWithValue(“@EmpId”,EmpId);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
//按ID获取员工
公共EmployeeInfo GetEmployeeById(int?empId)
{
EmployeeInfo emp=新的EmployeeInfo();
使用(SqlConnection con=newsqlconnection(connectionString))
{
SqlCommand cmd=newsqlcommand(“SP_GetEmployeeById”,con);
cmd.CommandType=System.Data.CommandType.StoredProcess;
cmd.Parameters.AddWithValue(“@EmpId”,EmpId);
con.Open();
SqlDataReader dr=cmd.ExecuteReader();
while(dr.Read())
{
emp.ID=Convert.ToInt32(dr[“ID”].ToString());
emp.Name=dr[“Name”].ToString();
emp.Gender=dr[“Gender”].ToString();
emp.Company=dr[“Company”].ToString();
emp.Department=dr[“Department”].ToString();
}
con.Close();
}
返回emp;
}
}
}
我的控制器:

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using AspNetCore;
using CRUDDemo.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ActionConstraints;

namespace CRUDDemo.Controllers
{
    public class EmployeeController : Controller
    {
        EmployeeDAL employeeDAL = new EmployeeDAL();
        public IActionResult Index()
        {
            List<EmployeeInfo> empList = new List<EmployeeInfo>();
            empList = employeeDAL.GetAllEmployee().ToList();
            return View(empList);
        }

        [HttpGet]
        public IActionResult Create()
        {
            return View();
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public IActionResult Create([Bind] EmployeeInfo objEmp)
        {
            if (ModelState.IsValid)
            {
                employeeDAL.AddEmployee(objEmp);
                return RedirectToAction("Index");
            }
            return View(objEmp);
        }

        public IActionResult Edit(int? id)
        {
            if (id == null)
            {
                return NotFound();
            }
            EmployeeInfo emp = employeeDAL.GetEmployeeById(id);
            if(emp == null)
            {
                return NotFound();
            }
            return View(emp);
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public IActionResult Edit(int? id, [Bind] EmployeeInfo objEmp)
        {
            if (id == null)
            {
                return NotFound();
            }
            if (ModelState.IsValid)
            {
                employeeDAL.UpdateEmployee(objEmp);
                return RedirectToAction("Index");
            }
            return View(employeeDAL);
        }
        [HttpGet]
        public IActionResult Details(int? id)
        {
            if (id == null)
            {
                return NotFound();
            }
            EmployeeInfo emp = employeeDAL.GetEmployeeById(id);
            if (emp == null)
            {
                return NotFound();
            }
            return View(emp);
        }

        public IActionResult Delete(int? id)
        {
            if (id == null)
            {
                return NotFound();
            }
            EmployeeInfo emp = employeeDAL.GetEmployeeById(id);
            if (emp == null)
            {
                return NotFound();
            }
            return View(emp);
        }
        [HttpPost,ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public IActionResult DeleteEmp(int? id)
        {
            employeeDAL.DeleteEmployee(id);
            return RedirectToAction("Index");
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.L
    @foreach(var emp in Model)
    {
       @if(emp != null)
       {
            // bind the properties to UI element
       }