我已经构建了一个包含多个页面的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
答案 0 :(得分:1)
Single
,First
等时,会引发“序列不包含元素”。在这种情况下,您有几个选项:
您可以测试您的查询集中包含某些内容,首先使用类似Any
的内容,即:
if (queryset.Any())
{
...
}
您只需使用try-catch从异常中恢复:
try
{
var foo = queryset.First();
}
catch (InvalidOperationException)
{
// handle it
}
您可以改用SingleOrDefault
,FirstOrDefault
等。如果查询集为空,OrDefault
版本将返回null
而不是引发异常。但是,请务必进行正确的空值检查,否则您只需将NullReferenceException
替换为此例外。