我有一个Razor视图,开头像:
@using My.Models @model MySpecificModel @{ ViewBag.Title = "My Title"; // NullReferenceException here: string dateUtc = (Model == null ? DateTime.UtcNow.ToShortDateString() : Model.Date.ToShortDateString());
我在最后一行看不到NullReferenceException的原因(注意:“=?:”的东西在我的源代码中的一行.它被格式化为适合这里.)
然后我删除dateUtc的/ assignment赋值,NullReferenceException移动到ViewBag.Title行:
@using My.Models @model MySpecificModel @{ ViewBag.Title = "My Title"; // NullReferenceException here:
怎么可能发生这种情况? ViewBag当然不是null.
注1:仅当Model为null时才会发生这种情况.
注2:MySpecificModel.Date的类型为DateTime,因此永远不能为null.
解决方法
您提供了一个空的默认模型,它什么也不做.这将是模型不为空.它将有助于拥有IsEmpty属性.更好的是,如果可以在您的情况下应用,则使用具有默认值的模型.重要的是模型永远不会为空