c# - MVC Razor 对象引用未设置为对象的实例
问题描述
我遇到了一个我觉得非常不寻常的问题,我有一个包含实体对象的视图模型,在这种情况下它是一顿饭,但是如果您访问该页面但还没有吃饭,它可能为空,所以我在 razor 中检查它,在检查它的地方,在 null check 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 在给定的执行中确实为空,但这就是检查的重点。如果我删除花括号内的所有 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
}
谢谢你的帮助。
解决方案
我能够确定问题所在。错误指针位于错误的位置。嵌套在最后大括号下方的 HTML 中是另一个没有检查 Meal 对象上的 null 的引用,一旦这些引用也包含在 null 检查中,页面就会按预期加载。正如我所担心的,错误并不真正在它指向的位置。如果您发现此问题并正在寻找类似的问题,请查找除 RAZOR 中指向的确切位置之外的其他位置,我的位置在 div 标记中大约 10 行。
推荐阅读
- jquery - JQuery 传递元素以加载结果函数
- python - 函数 id 使我的条件无法运行
- java - 根据Editor Id打开eclipse编辑器
- node.js - Keystonejs 获取插入的 id 值
- laravel - 如何取消链接具有 www-data 所有权的文件?[拉拉维尔]
- swift - 如何塑造类似 Ipad 的 Popover 的方向?
- c# - 转换格式时magickimage.net(C#)图像饱和度?
- react-native - 无法运行 Expo 生成的 .apk
- java - 是否从 Spring 5 中删除了 GlobalSession 范围的 bean?为什么?
- yaml - 如何引用 yaml 文件中的值?