处理"对象引用未设置为对象的实例"错误

时间:2015-07-07 18:55:13

标签: asp.net-mvc entity-framework .net-4.0

我收到错误:

  

发生System.NullReferenceException HResult = -2147467261   Message =对象引用未设置为对象的实例时   试图访问视图。

错误指向此行:

<span>@(d.AcceptPropagation == null ? string.Empty : "Accepts Propagation")</span> 

我在foreach循环中设置了一个断点,然后逐步找到null发生的位置。我没有收到错误,直到第5次循环,我在DocumentTemplate得到一个null。我以为我正确处理了null。我需要额外的空值检查吗?我需要以不同方式处理这个问题吗?以下是观点。我也改变了#34;&#34;代码中的string.Empty。

@if (criteria != null)
        {
            foreach (var d in criteria)
            {
                <tr>
                    <td style="width: 80px;">
                        <a class="blue button edit-template" data-reveal-id="edit-form" id="@d.ID">Edit</a>
                    </td>
                    <td>
                        <strong>@(d.DocumentTemplate == null ? string.Empty: d.DocumentTemplate.Name)</strong><br />
                        <div>@d.GroupCode</div>
                        <span>@d.PlanCode</span>
                        <span>@d.SubPlanCode</span>
                        <span>@d.ActionCode</span>
                        <span>@d.AdmitTerm</span>
                        <span>@d.AdmitTypeCode</span>
                        <span>@d.ProgramCode</span>
                        <span>@d.ResidentCode</span>
                        <span>@(d.V19 == true ? "V19" : string.Empty)</span>
                        <span>@(d.A23 == true ? "A23" : string.Empty)</span>
                        <span>@(d.AcceptPropagation == null ? string.Empty : "Accepts Propagation")</span> 
                        <div><a href="@Url.Content(d.DocumentTemplate.Path)">@(Url.Content(d.DocumentTemplate.Path)==null? string.Empty : d.DocumentTemplate.Path)</a></div>
                    </td>
                </tr>
            }
        }

2 个答案:

答案 0 :(得分:1)

您没有检查此行中的DocumentTemplate是否为空

<div><a href="@Url.Content(d.DocumentTemplate.Path)">@(Url.Content(d.DocumentTemplate.Path)==null? string.Empty : d.DocumentTemplate.Path)</a></div>

答案 1 :(得分:1)

它实际上是您提到的导致问题的那一行。由于某种原因,Razor查看NullReferenceExceptions指向上面的行多次。更改它下面的行以进行相同的空检查,它将起作用:

<div>
    @if(d.DocumentTemplate != null)
    {
        <a href="@Url.Content(d.DocumentTemplate.Path)">@d.DocumentTemplate.Path</a>    
    }
</div>

请参阅this link用户最初发现问题的位置。