/ / Niespodziewany wyjątek NullReferenceException w widoku - asp.net-mvc, asp.net-mvc-4, brzytwa

Nieoczekiwany wyjątek NullReferenceException w asp.net-mvc, asp.net-mvc-4, brzytwa

Mam widok Razor, który zaczyna się jak:

@using My.Models
@model MySpecificModel
@{
ViewBag.Title = "My Title";
// NullReferenceException here:
string dateUtc =
(Model == null ? DateTime.UtcNow.ToShortDateString() :
Model.Date.ToShortDateString());

Nie widzę powodu dla wyjątku NullReferenceException w ostatniej linii (uwaga: rzeczy "=?:" Znajdują się w jednym wierszu w moim kodzie źródłowym i są sformatowane tak, aby pasować tutaj).

Następnie usuwam deklarację / przypisania do dateUtc a wyjątek NullReferenceException przechodzi do linii ViewBag.Title:

@using My.Models
@model MySpecificModel
@{
ViewBag.Title = "My Title";  // NullReferenceException here:

Jak to się może stać? ViewBag oczywiście nie jest puste.

NOTATKA 1: Dzieje się tak tylko wtedy, gdy Model ma wartość null.

UWAGA 2: MySpecificModel.Date jest typu DateTime, więc nigdy nie może mieć wartości null.

Odpowiedzi:

3 dla odpowiedzi № 1

Podajesz pusty domyślny model, który to robinic. Będzie tak, aby Model nie był null, ponieważ pomoże mieć właściwość IsEmpty, a jeszcze lepiej, jeśli można go zastosować w twoim przypadku, model z wartościami domyślnymi. Ważne, że model nie ma wartości null


4 dla odpowiedzi nr 2

Wyjątek NullReferenceException na ViewBag.Title może wskazywać, że błąd jest naprawdę na linii w pobliżu. W tym przykładzie błąd został zgłoszony w wierszu 1, ale prawdziwym błędem była zerowa wartość Model.Invoice w wierszu 3.

<h2>@ViewBag.Title</h2>
<div class="pull-right">
<button onclick="addInvoice("@Model.Invoice.InvoiceId");">Add Invoice</button>
</div>

Brzytwa ASP.NET MVC nie obsługuje wartości null w potrójnych instrukcjach takich jak C #.

//Ternaries can error in Razor if Model is null
string date = (Model == null ? DateTime.Now : Model.Date);

//Change to
string date = null;
if (Model == null)
date = DateTime.Now;
else
date = Model.Date;

3 dla odpowiedzi nr 3

Otrzymasz wyjątek null, jeśli nie przekazujesz żadnego modelu do widoku i nadal masz widok powiązany z modelem np .:

@model MySpecificModel

Kiedy nie przekazałeś takiego modelu do widoku z kontrolera.