TryUpdateModelAsync()无法传递对象参数进行更新

时间:2018-01-13 23:03:15

标签: asp.net entity-framework asp.net-core model

我遇到了一个最奇怪的问题。我正在尝试更新模型的属性,如下所示:

        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代码,除了具有相同属性的不同模型并且它在那里工作。

发生了什么事?这拒绝建立

见此截图:

Problem

Intellisense认识到" p"是类型为Answer,但是当我开始键入它们时,不会显示任何属性。

1 个答案:

答案 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]])