【问题标题】:MVC Razor Object reference not set to an instance of an objectMVC Razor 对象引用未设置为对象的实例
【发布时间】: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


【解决方案1】:

我能够确定问题所在。错误指针在错误的位置。嵌套在 HTML 末尾大括号下面的是另一个引用,没有检查 Meal 对象上的 null,一旦这些也包含在 null 检查中,页面会按预期加载。正如我所担心的那样,错误并不真正在它指向的位置。如果您发现此问题并正在搜索类似问题,请查找除 RAZOR 中指向的确切位置之外的其他位置,我的位置在 div 标记中大约 10 行。

【讨论】:

    猜你喜欢
    • 2021-04-11
    • 2013-07-26
    • 2020-04-13
    • 2013-03-21
    • 2015-09-27
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多