【发布时间】:2017-05-30 02:02:06
【问题描述】:
我遇到了这个错误,我想知道是否有人可以帮助解释为什么会发生这种情况。
我在视图中显示书籍列表,并且模型中的所有内容都正确显示。但是,下面的代码不起作用:
@foreach (var item in Model.Books)
{
.. (other unrelevant code is here)...
@{
<!-- Display icon based on the recommendation status -->
if (item.Recommendation.recName == "Highly Recommended" || item.Recommendation.recName == "Recommended")
{
<img src="~/Content/Images/check.png" alt="Recommended" title="This book is recommended."/>
}
if (item.Recommendation.recName == "Parental Judgement")
{
<img src="~/Content/Images/warning.png" alt="Parental Judgement" title="Parental Judgement required for this book."/>
}
if (item.Recommendation.recName == "NOT Recommended")
{
<img src="~/Content/Images/stop.png" alt="Not Recommended" title="This book is NOT Recommended!"/>
}
}
.. (other unrelevant code is here)...
}
从代码中应该很明显,但我要做的是根据每本书的推荐状态显示不同的图标。当我运行该代码时,它给了我一个错误说Object reference not set to an instance of an object.
这是一个非常标准的错误类型,但我很困惑,因为对象引用似乎已设置,基于 此代码 正常工作并显示正确值(例如强烈推荐或不推荐)每本书:@Html.DisplayFor(modelItem => item.Recommendation.recName)
所以总结一下我的具体问题:为什么modelItem => item... 中的 lambda 表达式有效,而 same exact model 的其他代码无效?
而且由于我显然在这里缺少对某些东西的理解,所以让我问一个更一般的问题:什么时候使用@item.property 语法是“合法的”,什么时候会导致错误(比如我有以上)?
【问题讨论】:
-
item在哪里定义?你能显示那个代码吗?而且那个 lambda 似乎是错误的,它应该是item = > item.Recommedation.recName。 -
您确定
item.Recommendation.recName存在吗? NRE 表示每个item或Recommendation部分都包含无法取消引用的空值(请参阅此处的NRE 说明:stackoverflow.com/questions/4660142/…)。 -
@juharr 我在 foreach 循环的开头添加了。
-
为什么问题被标记了? @TetsuyaYamamoto 我了解 NRE 是什么,但
@Html.DisplayFor(modelItem => item.Recommendation.recName)有效。这不是说item或Recommendation都确实存在吗? -
我不知道控制器方法长什么样,但由于没有使用
return View(modelName)传递强类型集合,Model通常会返回 null。请注意,ViewBag.Model是动态属性,如果模型集合未正确返回,则可能包含空值。Model.Books.Recommendation此时可能未初始化并在取消引用recName时抛出 NRE。
标签: c# asp.net-mvc lambda