6

次のように始まる Razor ビューがあります。

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

最後の行に NullReferenceException の理由がわかりません (注: " = ? :" はソース コードの 1 行にあります。ここに収まるようにフォーマットされています)。

次に、/ への代入の宣言を削除するdateUtcと、NullReferenceException が ViewBag.Title 行まで移動します。

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

これはどのように起こりますか? ViewBagもちろんnullではありません。

注 1 : これModelは null の場合にのみ発生します。

注 2 : MySpecificModel.Date は DateTime 型であるため、null になることはありません。

4

3 に答える 3

4

ViewBag.Title の NullReferenceException は、エラーが実際には近くの行にあることを示している可能性があります。この例では、1 行目でエラーがスローされましたが、実際のエラーは 3 行目の null Model.Invoice でした。

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

また、ASP.NET MVC Razor は、C# のように 3 項ステートメントで null を処理しません。

//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;
于 2014-11-07T18:35:15.907 に答える
3

モデルをビューに渡さず、ビューがモデルにバインドされている場合、null 例外が発生します。

@model MySpecificModel 

そのようなモデルをコントローラーからビューに渡さなかった場合。

于 2013-04-29T06:42:15.643 に答える