【发布时间】:2021-09-14 11:22:03
【问题描述】:
我遇到了一个非常不寻常的问题,我有一个包含实体对象的视图模型,在这种情况下是一顿饭,但是如果您访问该页面但还没有吃饭,它可以为空,所以我在 razor 中检查它,在检查它的地方,在 null 检查 if 语句的末尾,我收到错误:
MVC Razor 对象引用未设置为对象的实例 MYAPP.Models.ViewModels.MealViewModel.CurrentMeal.get 返回 null。
光标指向 if 语句的右大括号:
@if(Model.CurrentMeal != null)
{
// html, but still throws if removed and just if exists
} // exception pointer points to this line on crash
CurrentMeal 在给定的执行中确实为 null,但这就是检查的重点。如果我删除花括号内的所有 html,它仍然会引发错误。如果我只是在其中输出任何内容,它仍然会抛出。当有 CurrentMeal 时,代码可以正常工作。我尝试向视图模型 HasMeal 添加一个属性并在视图模型中处理它,以查看它是否只是我缺少的 RAZOR 格式中的某些内容并得到了相同的错误。它指向大括号而不是 if 条件本身也很奇怪。除此之外,我已经删除了整个 if 并且它工作正常,如果我只是渲染 if 条件的结果,它仍然会在它为 null 时抛出,所以它应该只在页面上渲染 true 或 false,而是抛出一个错误。这是真正奇怪的事情,更完整的代码如下所示:
<div>
@if(Model.CurrentMeal != null)
{
// Render some controls to work with the meal
}
<div>Some controls to always have with or without a meal</div>
@if(Model.CurrentMeal != null)
{
// Render some controls to work with the meal
}
</div>
它在大括号的第二个引发错误,而不是第一个。我已经用一顿有效的饭菜测试了几个星期的页面,现在在没有饭菜的情况下进行了测试,吃饭时一切正常。如果只删除 if 语句,它就可以正常工作。
public class MealViewModel
{
public Meal CurrentMeal { get; set; } // entity framework object
// ... additional properties
}
感谢您的帮助。
【问题讨论】:
-
您确定
Model本身不为空吗?控制器长什么样? -
不,模型不为空,我什至尝试添加一个属性来检查视图模型中的餐点是否为空,但仍然导致同样的崩溃。并且错误本身将属性指向为空部分,我可以悬停断点并查看它的模型是否有效。谢谢。
标签: c# asp.net asp.net-mvc entity-framework razor