ASP.NET MVC中未设置对象引用 - 为什么?

时间:2016-07-18 20:05:49

标签: c# asp.net asp.net-mvc razor

我理解这个错误是如何发生的,但我不明白为什么。上下文对我没有意义。请允许我解释一下:

这是我的" 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);
        }

0 个答案:

没有答案