ASP.NET Core Razor Pages 完成编辑页面

admin
admin
2022-03-02
分享:

ASP.NET Core Razor Pages 完成编辑页面

导航:

本章是第14部分的继续。 在此视频中,我们将讨论如何通过将 Razor Pages发回到服务器来更新服务器上的数据。

IStudentRepository服务接口

在IStudentRepository服务接口中,包括Update()方法。

注意,此方法返回Student对象。这是更新的学生。

在大多数实际应用程序中,通常会自动更新某些属性。例如,lastupdatetime字段,对于此类属性,我们通常不从用户界面提供数据。它可以由Web服务器或数据库服务器自动计算。

通过返回更新的Student对象,我们将可以访问那些更新的属性。


namespace YoYoMooc.StudentManagement.Services
{
    public interface IStudentRepository
    {
        IEnumerable<Student> GetAllStudents();
        Student GetStudent(int id);
        Student Update(Student updatedStudent);
    }
}

MockStudentRepository 服务

包括以下内容更新()的方法MockStudentRepository服务。

  public Student Update(Student updatedStudent)
        {
            Student student = _studentList
                   .FirstOrDefault(e => e.Id == updatedStudent.Id);
            if (student != null)
            {
                student.Name = updatedStudent.Name;
                student.Email = updatedStudent.Email;
                student.Major = updatedStudent.Major;
            }
            return student;
        }

Edit.cshtml.cs

  1. 在Edit.cshtml.cs中包含以下方法
    1. OnGet()处理GET请求,
    2. OnPost()处理POST请求
  2. ASP.NET Core中的模型绑定会自动将表单中Student的对象值映射到对应的方法参数上。
  3. 当不需要处理表单以外的属性值的时候,我们可以使用此OnPost()方法处理它们。
  4. 数据更新后,将请求重定向到“Index” Razor Pages,以便我们可以看到更新的更改。
public IActionResult OnPost(Student student)
{
     Student = _studentRepository.Update(student);
    return RedirectToPage("Index");
}

BindProperty属性

  1. 您还可以使用BindProperty属性实现相同的操作。
  2. 此属性自动将Post的表单值绑定到Student公共属性。
  3. 当你除了OnPost()以外的方法,也需要处理表单中的值时,也可以使用此方法。

[BindProperty]
public Student Student { get; set; }

public IActionResult OnPost()
{
    Student = studentRepository.Update(Student);
    return RedirectToPage("Index");
}