使用Net6.0 Razorpages,我有一个通过Id返回Person的表单,并允许用户更新记录或添加新的Person 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 }
,我建议你使用第二种方法。