MrJ*_*eno 14 c# asp.net-core-mvc
所以我正在使用EF 6在ASP.NET Core上进行这个微软教程,它只是通过编辑控制器更新模型.
有一段代码让我感到非常困惑,我想象(也许是希望)对你们很多人来说并不那么令人困惑.
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
Run Code Online (Sandbox Code Playgroud)
所以,这个控制器作为参数唯一的东西是int id,它是如何获得的studentToUpdate.我在这里不完全熟悉的是,它从何处获取更新值?
我知道的:
TryUpdateModelAsync<Student>
studentToUpdate.FirstMidNames是Carson(原始)但是在执行函数之后它是Carsey(新的).该字符串Carsey始终位于此> Request> Form> Results View(其中包含表单中所有值的列表).所以我理解该TryUpdateModelAsync函数以某种方式使用linq语句和表单结果来获取新值studentToUpdate,但我真的不知道它是如何以及在何处执行此操作?
Nko*_*osi 11
没有涉及太多的技术细节.TryUpdateModelAsync在提供的示例中调用
if (await TryUpdateModelAsync<Student>(
studentToUpdate,
"",
s => s.FirstMidName, s => s.LastName, s => s.EnrollmentDate)){
//...
}
Run Code Online (Sandbox Code Playgroud)
使用控制器当前的值更新指定的Student实例,该值将填充请求中提供的数据.它使用lambda表达式来表示在尝试更新时需要包含在当前模型中的顶级属性.它将仅采用这些属性的值并更新模型.studentToUpdateControllerContext
所以在上面的例子中,即使整个模型由形式提供它只会更新FirstMidName,LastName以及EnrollmentDate在指定的实例.