我收到了一个无效操作异常,栈追踪信息如下。我认为这是因为db.Responses.Where(y => y.ResponseId.Equals(item.ResponseId)).First();
没有返回任何结果。我检查了响应数据和userResponseDetails都有一个ResponseId,我也使用了硬编码的值。 我还知道调用这个函数的语句正在添加这个函数应该调用的Responses行。(大约一个月前这个功能是正常的,我不记得更改会导致它崩溃)
[InvalidOperationException: Sequence contains no elements]
System.Linq.Enumerable.First(IEnumerable`1 source) +269
System.Data.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__0(IEnumerable`1 sequence) +41
System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle(IEnumerable`1 query, Expression queryRoot) +59
System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute(Expression expression) +133
System.Data.Entity.Internal.Linq.DbQueryProvider.Execute(Expression expression) +87
System.Linq.Queryable.First(IQueryable`1 source) +251
InSight.Controllers.ForecasterController.userResponseDetails(List`1 userResponseDetails) +1039
这里是有问题的代码。
[HttpPost]
public JsonResult userResponseDetails(List<ResponseDetailsPartial> userResponseDetails)
{
foreach (ResponseDetailsPartial item in userResponseDetails)
{
ResponseDetails temp = new ResponseDetails();
temp.ResponseId = item.ResponseId;
temp.ResponseDetailVal = item.ResponseDetailVal;
temp.QuestioChoicesId = item.QuestioChoicesId;
temp.Response = db.Responses
.Where(y => y.ResponseId.Equals(item.ResponseId)).First();
temp.QuestionChoice = db.QuestionChoices
.Where(x => x.QuestionChoicesId.Equals(item.QuestioChoicesId)).First();
db.ResponseDetails.Add(temp);
}
db.SaveChanges();
return Json(new { ResponseDetailsId = userResponseDetails }, JsonRequestBehavior.AllowGet);
}
这是调用特定操作的 AJAX:
$.ajax({
type: "POST",
url: '/Forecaster/userResponseDetails/',
data: JSON.stringify(rdetail),
dataType: 'json',
contentType: 'application/json',
})
这是序列化后的rdetail内容:
[{"ResponseId":118,"ResponseDetailVal":0.36,"QuestioChoicesId":null}]