C# 序列无元素

C# 序列无元素,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我已经建立了一个ASP.NETMVC网站,有多个页面,一切正常。然而,当他们在页面打开几分钟(10到30分钟)并做一些其他工作后试图发布页面时,会收到一条错误消息,表示序列不包含任何元素 表单是使用razor代码生成的: @使用(Html.BeginForm(“Index”,“Beoordeling”,FormMethod.Post,new{@id=“beoordelingForm”})) { ... } 控制器方法如下所示: [HttpPost] [ValidateAntiForgeryT

我已经建立了一个ASP.NETMVC网站,有多个页面,一切正常。然而,当他们在页面打开几分钟(10到30分钟)并做一些其他工作后试图发布页面时,会收到一条错误消息,表示序列不包含任何元素

表单是使用razor代码生成的:

@使用(Html.BeginForm(“Index”,“Beoordeling”,FormMethod.Post,new{@id=“beoordelingForm”}))
{
...
}

控制器方法如下所示:

 [HttpPost]
 [ValidateAntiForgeryToken]
 public ActionResult Index([Bind(Include = allparameters")] object ObjectName)
 {
 }
同样,这只会在页面打开一段时间后发生。 如果他们只是在打开页面时使用它,则不会出现任何复杂情况

这个问题发生在我所有的ASP.NET MVC网站上

我认为这是要发布的表单的设置/默认行为,但是有人能解释一下为什么会出现错误消息吗

“/”应用程序中出现服务器错误


序列不包含元素说明:未处理的异常 在执行当前web请求期间发生。请 查看堆栈跟踪以了解有关错误和位置的更多信息 它起源于代码

异常详细信息:System.InvalidOperationException:序列包含 无元素

源错误:

在执行过程中生成了未处理的异常 当前web请求。关于货物来源和位置的信息 可以使用异常堆栈跟踪来识别异常 下面。堆栈跟踪:

[无效操作异常:序列不包含任何元素] System.Linq.Enumerable.First(IEnumerable`1 source)+264

当您试图在空查询集中调用
Single
First
等时,将引发“Sequence contains no elements”(序列不包含元素)。在此场景中,您有几个选项:

  • 您可以首先使用
    Any
    之类的方法测试您的查询集是否包含某些内容,即:

    if (queryset.Any())
    {
        ...
    }
    
  • 您可以简单地使用try-catch从异常中恢复:

    try
    {
        var foo = queryset.First();
    }
    catch (InvalidOperationException)
    {
        // handle it
    }
    
  • 您可以改用
    SingleOrDefault
    FirstOrDefault
    等。如果queryset为空,则
    或default
    版本将只返回
    null
    ,而不是引发异常。但是,请确保执行适当的空检查,否则您只需将此异常替换为
    NullReferenceException


  • 你的linq调用在哪里?我想这可能是因为ValidateAntiForgeryToken,它创建了一个要在服务器端验证的cookie,我想在你提到的cookie过期之后。这个错误只在发布表单时发生,所以据我所知没有linq调用@DanielA.White@TiagoÁvila这可能是,但我们需要AntiForgerytoken来检查postHi Chris的数据,不幸的是,它发生在一个页面的帖子上,该页面将返回一个填充对象。然后,我们对对象进行一些检查,并将其保存在数据库中。问题是,当您将页面保持打开状态一段时间时,会发生此错误。如果是对空查询集进行检查,那么为什么表单发布的是空对象。谁知道呢?这里没有代码告诉你为什么会发生这种情况。我们需要查看您的整个视图和操作代码。