使用 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。
检查你的模型设计,
PersonId
是数据库中的PrimaryKey
,当用户发布新记录时,PersonId
的值是自增的,而不是取决于新记录中PersonId
的值。当用户要发布新记录时,PersonId
的输入框会被自动锁定,不允许用户输入任何内容,因此页面不会接收到PersonId
的值,页面刷新后,不会显示PersonId
的真实价值。
在我看来,向用户显示主键是没有必要的,但是如果你想这样做,你可以通过
PersonId
查询并在添加新记录后将结果返回到页面或者只是RedirectToPage("/Edit", new{ personId = Person.Id }
,我推荐您使用第二种方法。