我有一张表格,显示学生每次注册课程。我有一个foreach循环遍历学生的所有注册
@foreach (var item in Model.Enrollments)
{
<tr>
<td> @Html.DisplayFor(modelItem => item.Course.CourseID) </td>
<td> @Html.DisplayFor(modelItem => item.Course.Title) </td>
<td> @Html.DisplayFor(modelItem => item.Course.Type) </td>
<td> @Html.DisplayFor(modelItem => item.Status) </td>
</tr>
}
现在这样可以正常运行,但是当我尝试使用if语句只显示具有某种类型的课程时
@foreach (var item in Model.Enrollments)
{
if (item.Course.Type == "Basic Core")
{
<tr>
<td> @Html.DisplayFor(modelItem => item.Course.CourseID) </td>
<td> @Html.DisplayFor(modelItem => item.Course.Title) </td>
<td> @Html.DisplayFor(modelItem => item.Course.Type) </td>
<td> @Html.DisplayFor(modelItem => item.Status) </td>
</tr>
}
}
我得到了
“对象引用未设置为对象的实例。”第115行的错误
描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。
来源错误:
Line 113:{
Line 114:
Line 115: if (item.Course.Type == "Basic Core") {
Line 116: <tr>
Line 117: <td> @Html.DisplayFor(modelItem => item.Course.CourseID) </td>
根据我的理解,foreach循环会跳过任何null对象(如果有的话)。任何帮助将不胜感激。
这是我的控制器
public ActionResult Details(int? StudentID)
{
if (StudentID == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Student student = db.Students.Find(StudentID);
if (student == null)
{
return HttpNotFound();
}
return View(student);
}
答案 0 :(得分:0)
正如Code的Coder所指出的那样,你有一个包含一个Course对象设置为null的item对象。
由于item对象不为null,因此它从枚举中获取。然后在检查内部Course对象时,它抛出异常,因为它为null。为了避免在评估对象之前检查null,如下所示:
@foreach (var item in Model.Enrollments)
{
if (item.Course != null && item.Course.Type == "Basic Core")
{
<tr>
<td> @Html.DisplayFor(modelItem => item.Course.CourseID) </td>
<td> @Html.DisplayFor(modelItem => item.Course.Title) </td>
<td> @Html.DisplayFor(modelItem => item.Course.Type) </td>
<td> @Html.DisplayFor(modelItem => item.Status) </td>
</tr>
}
}
您还可以调试剃刀代码,以查看在需要时发生了什么。