Razorpages 发布新记录并返回具有更新 ID 的页面

问题描述 投票:0回答:1

使用 ASP.NET Core Razor 页面,我有一个按 Id 返回人员的表单,并允许用户更新记录或添加新的人员 OnPost。

发布新记录时,我希望它返回同一页面并显示更新后的 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。

asp.net-core razor-pages
1个回答
1
投票

检查你的模型设计,

PersonId
是数据库中的
PrimaryKey
,当用户发布新记录时,
PersonId
的值是自增的,而不是取决于新记录中
PersonId
的值。当用户要发布新记录时,
PersonId
的输入框会被自动锁定,不允许用户输入任何内容,因此页面不会接收到
PersonId
的值,页面刷新后,不会显示
PersonId
的真实价值。

在我看来,向用户显示主键是没有必要的,但是如果你想这样做,你可以通过

PersonId
查询并在添加新记录后将结果返回到页面或者只是
RedirectToPage("/Edit", new{ personId = Person.Id }
,我推荐您使用第二种方法。

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