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 }
,我建议你使用第二种方法。
使用 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 }
,我建议你使用第二种方法。