我遇到了一个最奇怪的问题。我正在尝试更新模型的属性,如下所示:
Answer = await dbContext.Answer.SingleOrDefaultAsync(p => p.ID == postedAnswer.AnswerID);
// Set timestamp and answer
Answer.AnswerTimestamp = DateTime.Now;
Answer.SelectedAnswer = postedAnswer.SelectedAnswer;
//Save changes
await TryUpdateModelAsync(
Answer,
"Answer",
p => p.AnswerTimeStamp, p.SelectedAnswer);
// Save changes
await dbContext.SaveChangesAsync();
然而,intellisense在p.AnswerTimeStamp上抛出错误: "答案不包含AnswerTimeStamp的定义,也没有扩展方法bla bla bla ..."
TryUpdateModelAsync的其中一个版本允许传入模型,字符串名称和要更新的参数。实际上,我在另一个页面中使用了精确的VERBATIM代码,除了具有相同属性的不同模型并且它在那里工作。
发生了什么事?这拒绝建立
见此截图:
Intellisense认识到" p"是类型为Answer,但是当我开始键入它们时,不会显示任何属性。
答案 0 :(得分:2)
这是因为IntelliSense为您提供不同的过载。 TryUpdateModelAsync<TModel>(TModel, String, Func<ModelMetadata,Boolean>)
代替TryUpdateModelAsync<TModel>(TModel, String, Expression<Func<TModel,Object>>[])
。您可能希望明确表示要使用带有includeExpressions参数的那个。
await TryUpdateModelAsync(
Answer,
"Answer",
includeExpressions: p => new [] { p.AnswerTimeStamp, p.SelectedAnswer });
相关链接:
TryUpdateModelAsync[TModel](TModel, String, Func[ModelMetadata, Boolean])
TryUpdateModelAsync[TModel](TModel, String, Expression[Func[TModel,Object]])