C# 序列无元素
我已经建立了一个ASP.NETMVC网站,有多个页面,一切正常。然而,当他们在页面打开几分钟(10到30分钟)并做一些其他工作后试图发布页面时,会收到一条错误消息,表示序列不包含任何元素 表单是使用razor代码生成的: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
@使用(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
{
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的数据,不幸的是,它发生在一个页面的帖子上,该页面将返回一个填充对象。然后,我们对对象进行一些检查,并将其保存在数据库中。问题是,当您将页面保持打开状态一段时间时,会发生此错误。如果是对空查询集进行检查,那么为什么表单发布的是空对象。谁知道呢?这里没有代码告诉你为什么会发生这种情况。我们需要查看您的整个视图和操作代码。