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 № 1Podajesz 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.