1

Я передаю объект в представление и получаю исключение для ссылочной ссылки, но объект не является нулевым.NullReferenceException на объекте не null

enter image description here

В действии у меня есть этот простой код:

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> 

EDIT: Я просто проверить небольшой код, который выводит название первого пользователя в представлении. И это случается со мной такая же ошибка! Попытка/улов явно работает плохо ... Я не понимаю.

Посмотрите на картину enter image description here

EDIT2: Я нашел ошибку. На странице макета была ошибка, и по какой-то причине визуальная студия не обнаружила ее.

Спасибо всем.

+0

вы можете вставить свою оставшуюся часть просмотра, пожалуйста? – Shyju

+0

Является ли 'Nome' просто публичной строкой в' Model', или это свойство? Мне интересно, когда вы обращаетесь к установщику на 'Nome' (при условии, что есть сеттер), вы можете получить доступ к некоторой другой переменной, которая равна нулю. –

+0

Имя является свойством – rmlm

ответ

-1

Обычно такая ошибка не имеет прямого отношения к месту, где они взрываются, но является следствием IoC/Dependency Injection.

Что в основном происходит, так это то, что на заднем плане инъекция зависимости может обеспечить различные объекты по мере необходимости, но делает это ленивым способом. Поэтому, если что-то - например, ваша страница макета - пока не требуется, оно еще не будет создано.

Итак, когда вы получаете доступ к чему-то вроде вашей модели, которая может иметь внутренние требования, требующие чего-то вроде вашего макета, тогда инъекция зависимостей запускается, вызывая ошибку в вашей модели, хотя ошибка не связана с моделью вообще ,

Это одна из действительно сложных аспектов инъекции зависимостей и, вероятно, чума вас в будущем :(.

Там также нет лучшей практики я знаю, чтобы избежать этого. Вашего подхода постепенно поворотов проблема - лучший способ продолжить AFAIK.