gpt4 book ai didi

c# - TryUpdateModelAsync 中发生了什么

转载 作者:可可西里 更新时间:2023-11-01 07:57:22 25 4
gpt4 key购买 nike

所以我正在这样做 microsoft tutorial在带有 EF 6 的 ASP.NET Core 上,它刚刚通过编辑 Controller 更新了一个模型。

这段代码让我非常困惑,我想(也许希望)对你们中的很多人来说并不那么困惑。

var studentToUpdate = await _context.Students.SingleOrDefaultAsync(s => s.ID == id);

if (await TryUpdateModelAsync<Student>(
studentToUpdate,
"",
s => s.FirstMidName, s => s.LastName, s => s.EnrollmentDate))
// goes on to save the context

因此,此 Controller 唯一作为参数的是 int id这就是它获取 studentToUpdate 的方式.我在这里不完全熟悉的是,它从哪里获取更新值?

我知道的:

  • TryUpdateModelAsync<Student>
    • 第一个参数:要更新的模型
    • 第二个参数:前缀 (?) 来自引用:在 . 中查找值时使用的前缀。
    • 第三个参数:我怀疑与我正在寻找的解决方案相关的 linq 语句。
  • 运行调试器并在函数执行之前studentToUpdate.FirstMidNamesCarson (原始)但在函数执行后它是 Carsey (新的)。字符串 Carsey始终在 this>Request>Form>Results View 中(其中包含表单中所有值的列表)。

所以我明白 TryUpdateModelAsync函数以某种方式使用 linq 语句和表单结果来获取 studentToUpdate 的新值,但我真的不明白它是如何以及在哪里做到这一点的?

最佳答案

无需过多讨论技术细节。在提供的示例中调用 TryUpdateModelAsync

if (await TryUpdateModelAsync<Student>(
studentToUpdate,
"",
s => s.FirstMidName, s => s.LastName, s => s.EnrollmentDate)){
//...
}

使用来自 Controller 当前 ControllerContext 的值更新指定的 Student 实例 studentToUpdate,该值将填充请求中提供的数据。它使用代表顶级属性的 lambda 表达式,这些属性在尝试更新时需要包含在当前模型中。它将仅采用这些属性的值并更新模型。

因此在上面的示例中,即使整个模型由表单提供,它也只会更新 FirstMidNameLastNameEnrollmentDate在指定实例上。

关于c# - TryUpdateModelAsync 中发生了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44567002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com