使用ASP.NET MVC Core Web API和Entity Framework Core中的TryUpdateModel更新模型不起作用

问题描述 投票:3回答:2

我是ASP.NET MVC Core Web API和EF Core的新手,我正在创建一个简单的MVC Web API演示,如下所示。

[HttpPut("{id}")]
public async void Put(int id, [FromBody]Student student)
    {
        if (ModelState.IsValid)
        {
            var stu = _context.Students
                .Where(s => s.StudentId == id)
                .SingleOrDefault();

            var updateResult = await TryUpdateModelAsync<Student>(stu, "", s => s.FirstName, s => s.LastName, s => s.EnrollmentDate);
            _context.SaveChanges();
        }

    }

问题是TryUpdateModelAsync不起作用,更改没有更新到数据库。

我想知道:

  1. 如果TryUpdateModelAsync可以在MVC Web API中使用?
  2. 我真的不想写下面的无聊代码,如何避免将属性值设置从一个对象到同一类型的另一个对象? (这是我使用TryUpdateModelAsync的第一个原因) stu.FirstName = student.FirstName; stu.LastName = student.LastName; stu.SomeOtherProperties = student.SomeOtherProperties; _context.SaveChanges();

.NET核心版本:1.1.0

ASP.Net核心版本:1.1.0

实体框架核心版本:1.1.0

asp.net-core-mvc entity-framework-core asp.net-core-webapi
2个回答
0
投票

尝试从您的身体传递学生实例,而不是您查找的那个。

 public async void Put(int id, [FromBody]Student student)
    {
        if (ModelState.IsValid)
        {
            student.StudentId = id; // If the ID isn't passed in or you could validate that it matches the id passed in
            var updateResult = await TryUpdateModelAsync<Student>(student, "", s => s.FirstName, s => s.LastName, s => s.EnrollmentDate);
            _context.SaveChanges();
        }
    }

0
投票

FromBody使用格式化程序将请求主体反序列化为JSON对象。

TryUpdateModelAsync依赖于模型绑定并使用值提供程序来获取数据。

您可以将发布的数据更改为使用模型绑定的表单帖子。

© www.soinside.com 2019 - 2024. All rights reserved.