【问题标题】:NullReferenceException on an object not null对象上的 NullReferenceException 不为空
【发布时间】:2013-03-04 21:13:58
【问题描述】:

我正在将一个对象传递给一个视图并得到一个空引用异常,但该对象不为空。

在动作中我有这个简单的代码:

return View(db.Users.First());

查看代码:

    @model User
    @using DG.WEB.Models

    @{
        ViewBag.SecondTitle = "Ver";
        ViewBag.MostraEditarTab = "false";
        ViewBag.MostraApagarTab = "false";
        ViewBag.Tab = "tab2";
        Layout = "~/Views/Conds/_Layout.cshtml";
    }


    <div class="container">
        @if (Model != null)
        {
            <h5>@Model.Nome</h5>

            <div id="container_atalhos">
                <div class="btn-group">
                  <a href="#" class="btn btn-mini"><i class="icon-th-large"></i>&nbsp;Nova frac</a>
                  <a href="#" class="btn btn-mini"><i class="icon-fire"></i>&nbsp;Nova Ocorrência</a>
                  <a href="#" class="btn btn-mini"><i class="icon-shopping-cart"></i>&nbsp;Novo Fornecedor</a>
                  <a href="#" class="btn btn-mini"><i class="icon-file"></i>&nbsp;Novo documento</a>
                  <a href="#" class="btn btn-mini"><i class="icon-pencil"></i>&nbsp;Editar</a>
                  <a href="#" class="btn btn-warning btn-mini"><i class="icon-remove-circle icon-white"></i>&nbsp;Apagar</a>
                </div>
            </div>
        }else{
           @:Not found
        }
</div>

编辑: 我只是测试一个打印视图中第一个用户名称的小代码。 它发生在我身上同样的错误! try / catch 显然效果不佳......我不明白。

看图

EDIT2: 我发现了错误。在布局页面中有一个错误,由于某种原因,Visual Studio 没有检测到它。

谢谢大家。

【问题讨论】:

  • 你能粘贴你剩下的部分视图吗?
  • 我添加了view的代码
  • 在您所有的图片中,它显示的是“Nome”而不是“Name”(第二个字母是 'o' 而不是 'a')¿这是正确的吗?
  • 是的,属性是葡萄牙语
  • 'FirstOrDefault()' 如果查询结果是一个空集合并且您只需对其执行.Nome,则返回 null。这是异常的潜在来源。所以如果你没有数据,你基本上是在做 null.Nome ,它会抛出 NRE。

标签: asp.net-mvc entity-framework razor nullreferenceexception


【解决方案1】:

通常此类错误与它们爆炸的地方没有直接关系,而是 IoC / 依赖注入的结果。

基本上发生的是,在后台,依赖注入能够根据需要提供各种对象,但这是否是一种 lazy 时尚。因此,如果某些东西——比如你的布局页面——还不需要,它还不会被创建。

因此,当您访问模型之类的东西时,它可能具有需要布局之类的内部需求,然后依赖注入启动,在您的模型中引发错误,即使该错误根本与模型无关。

这是依赖注入真正困难的方面之一,将来可能会再次困扰您:(。

据我所知,没有最佳实践可以避免这种情况。您逐步解决问题的方法是推进 AFAIK 的最佳方式。

【讨论】:

    猜你喜欢
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    相关资源
    最近更新 更多