我理解这个错误是如何发生的,但我不明白为什么。上下文对我没有意义。请允许我解释一下:
这是我的" Customers / details.cshtml"查看超级简单页面:
@model Vidly.Models.Customer
@{
ViewBag.Title = Model.Name;
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>@Model.Name</h2>
<ul>
<li>@Model.MembershipType.Name</li>
@if (Model.Birthday.HasValue)
{
<li>@Model.Birthday.Value.ToShortDateString()</li>
}
</ul>
行<li>@Model.MembershipType.Name</li>
正在创建以下错误:
异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。
我明白了,它告诉我我需要创建一个实例来使用这个属性...但为什么???令我感到困惑的是,如果没有那一行代码,页面上的其他内容都可以正常工作。为什么Model.MembershipType.Name需要一个实例,但Model.Name
不需要,Model.Birthday.Value.ToShortDateString()
不需要?
在我的Customers / index.cshtml页面上,我有以下代码块:
请注意我删除了&#34; ...&#34;:
@model IEnumerable<Vidly.Models.Customer>
...
@foreach (var customer in Model)
{
<tr>
<td>@Html.ActionLink(customer.Name, "Details", "Customers", new {id = customer.Id}, null)</td>
<td>@customer.MembershipType.Name</td>
</tr>
}
显然,这个foreach正在实例化Customer Model的一个对象,事实上,MembershipType.Name的这个实现工作得很好......但是,我不需要在Details页面中迭代它,所以,如果绝对有必要创建一个对象(我仍然不知道为什么),那么最好的方法是什么?
编辑:添加了控制器代码:
public ActionResult Details(int id)
{
var customer = _context.Customers.SingleOrDefault(c => c.Id == id);
if (customer == null)
return HttpNotFound();
return View(customer);
}