Razorpages Post 个新记录和 return 个具有更新 ID 的页面

Razorpages Post new record and return to page with updated Id

使用 Net6.0 Razorpages,我有一个表单 return 按 Id 设置一个人,并允许用户更新记录或添加一个新的 OnPost 人。

发布新记录时,我希望它return到同一页面并显示更新后的 ID,但它仍然是 0。


    public class Person
    {
        public int PersonId { get; set; }
        public string Name { get; set; }
        public string FavouriteDoughnut { get; set; }
    }

形式:

   @page "{personId:int}"
   @model Pages.EditModel

   <form method="post">
      <label asp-for="Person.PersonId">Id</label>
      <input asp-for="Person.PersonId" readonly>

      <label asp-for="Person.Name">Name</label>
      <input asp-for="Person.Name">

      <label asp-for="Person.FavouriteDoughnut">Doughnut?</label>
      <input asp-for="Person.FavouriteDoughnut">

      <button type="submit>Save</button>
   </form>
  
    [BindProperty(SupportsGet=true)]
    public Person Person { get; set; }

    public async void OnGet(int personId)
    {
        if(personId > 0)
        {
            Person = await _dbContext.People.FindAsync(personId);

            return;
        }
            Person = new Person();
    }

    public void OnPost()
    {
        Person = UpdatePerson(Person);
    }

    private void UpdatePerson(Person person)
    {
        _dbContext.People.Update(person);
        await _dbContext.SaveChanges();
        return person;
    }

我需要重定向到编辑页面吗?当我检查 Person OnPost 时,我可以看到它已更新并且页面刷新,只是没有填充新 ID。

检查你的模型设计,PersonId是数据库中的PrimaryKey,当用户post一条新记录时,PersonId的值是self-incrementing而不是取决于新记录中 PersonId 的值。当用户想要post一条新记录时,PersonId的输入框会自动锁定,不允许用户输入任何内容,所以页面不会接收PersonId的值,之后页面刷新,不会显示PersonId.

的真实值

在我看来,向用户显示主键是没有必要的,但如果你想这样做,你可以在添加后通过PersonId和return查询结果到页面新记录或者只是RedirectToPage("/Edit", new{ personId = Person.Id },我建议你使用第二种方法。