【问题标题】:Encountering 'Object reference not set to an instance of an object' error when editing record [duplicate]编辑记录时遇到“对象引用未设置为对象的实例”错误[重复]
【发布时间】:2015-10-26 15:09:03
【问题描述】:

您好,我想弄清楚为什么只有当我尝试编辑数据库中的记录时才会出现此错误,但代码与编辑更新代码无关。此代码用于运行存储过程,该存储过程用于提取组并将名称放入列表中。如果您添加一条记录或添加多条记录,它会起作用。

List<String> groups = new List<String>(); 

groups = db.spGetCurrentInsuranceGroups().ToList();

/* This where the stored procedure is being called to populate the insurance groups*/
foreach (String group in groups)
{
    <option value="@group">@group</option>
}

这里是添加新记录和编辑的图像。它填充下拉列表。但是如果你点击选择然后它想给出一个问题。

adding new record

editing record

如您所见,如果您点击提交以更新记录,它会填充给它带来问题的保险部分。

这是我得到的错误页面

“/”应用程序中的服务器错误。对象引用未设置为 对象的实例。描述:发生未处理的异常 在当前 Web 请求执行期间。请查看 堆栈跟踪以获取有关错误及其位置的更多信息 源于代码。

异常详细信息:System.NullReferenceException:没有对象引用 设置为对象的实例。

来源错误:

第 202 行:foreach (var group in groups.OfType().ToList())

堆栈跟踪:

[NullReferenceException: 对象引用未设置为 对象。] System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +271 System.Web.WebPages.WebPage.ExecutePageHierarchy(IEnumerable`1 执行器) +112 System.Web.WebPages.WebPage.ExecutePageHierarchy() +128 System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +131
System.Web.WebPages.WebPageHttpHandler.ProcessRequestInternal(HttpContextBase httpContext) +178

版本信息: Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.6.81.0

【问题讨论】:

  • 空引用异常意味着您的程序在需要非空值时遇到空值。 db.spGetCurrentInsuranceGroups() 实际返回的是什么?
  • 存储过程以字符串形式返回组的名称。但是就像我说的那样,如果我正常运行它并调出页面以添加记录,它就可以工作,但只有在我尝试编辑现有记录时才会出现该错误。

标签: c# asp.net asp.net-mvc razor


【解决方案1】:

Marcus,您的代码太短,无法发表意见(我真的不知道第 202 行到底是什么),但我看到您在代码中混入了代码,我认为这是错误的。

但是,尊重您的代码,您应该像这样引用 group var:

   List<String> groups = new List<String>(); 
   groups = db.spGetCurrentInsuranceGroups().ToList();

   foreach (String group in groups)
      {
         <option value="@group">group</option>
      }

祝你好运

【讨论】:

  • 大卫,感谢您的快速回复。 '' 代码正在提取值的名称和内部 html 文本。这是我在您的代码中看到的唯一区别。如果我正常运行它并调出页面以添加记录,它就会起作用,但只有在我尝试编辑现有记录时才会给我这个错误。但是该代码与编辑记录根本没有任何关系。
  • 嗯...我明白了...问题可能与获取要编辑的记录的存储过程有关(而不是您的代码本身),假设您在数据库中签入了新记录是否真的附加到.
  • 是的,正在将记录附加到数据库中。我让它们被拉到另一个页面上创建的动态表中,其中包含编辑链接。然后,当您单击编辑链接时,它会将您带到添加新记录并自动填充表单的同一页面。
  • 存储过程是否返回字符串,不是吗?但是 ToList() 指令用于获取字符串数组并转换为列表。那么,存储过程返回的这些字符串是否格式化为数组?如果没有,它们之间是否有任何分隔符(如 ; 或 ,)?
  • 我可以自己运行存储过程并且它可以工作。我在原始帖子中添加了图片,显示它正在拉动和填充选项。单击提交按钮时,即引发该错误,但我什至尝试在它编写 html 代码之前进行重定向,但我仍然收到错误。
【解决方案2】:

检查您的函数,很可能“spGetCurrentInsuranceGroups”没有向您的代码返回对象。我无法确定,因为您没有发布实际导致错误的代码,但我愿意猜测问题是由于无序条件返回 null 对象的函数引起的。

【讨论】:

    【解决方案3】:

    我发现了问题所在。当我将信息传递给更新代码时,它没有传递要更改的记录的 id,并且由于某种原因,我在用于保险的 foreach 循环上抛出了错误。

    感谢大家的帮助和想法。

    【讨论】:

      猜你喜欢
      • 2023-01-30
      • 2013-07-07
      • 2013-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多