序列没有元素

时间:2017-05-02 12:43:25

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

我已经构建了一个包含多个页面的ASP.net MVC网站,一切正常。然而,他们收到一条错误消息,指出序列在尝试将页面打开一段时间(10到30分钟)并执行其他工作后发布时不包含任何元素。

使用剃刀代码构建表单: @using (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:Sequence包含   没有元素

     

来源错误:

     

执行期间生成了未处理的异常   当前的网络请求。有关的来源和位置的信息   可以使用异常堆栈跟踪来识别异常   下面。堆栈跟踪:

     

[InvalidOperationException:Sequence不包含任何元素]   System.Linq.Enumerable.First(IEnumerable`1 source)+264

1 个答案:

答案 0 :(得分:1)

当您尝试在空的查询集上调用SingleFirst等时,会引发“序列不包含元素”。在这种情况下,您有几个选项:

  1. 您可以测试您的查询集中包含某些内容,首先使用类似Any的内容,即:

    if (queryset.Any())
    {
        ...
    }
    
  2. 您只需使用try-catch从异常中恢复:

    try
    {
        var foo = queryset.First();
    }
    catch (InvalidOperationException)
    {
        // handle it
    }
    
  3. 您可以改用SingleOrDefaultFirstOrDefault等。如果查询集为空,OrDefault版本将返回null而不是引发异常。但是,请务必进行正确的空值检查,否则您只需将NullReferenceException替换为此例外。