【发布时间】:2021-02-21 04:24:33
【问题描述】:
当我选择项目时,OnGetDetails(int id, int toggle) 方法被激活并将对象从数据库加载到属性。
[BindProperty]
public Creature Creature { get; set; }
public void OnGetDetails(int id, int toggle){
Creature = new GetCreature(_ctx).Get(id);
}
public Creature Get(int id){
return _ctx.Creatures.Include(i => i.Items).FirstOrDefault(x => x.Id == id);
} // Get()
我已经在调试器中验证它正确地分配了对象。
但是当我想在 OnPost 方法中使用该对象的属性时,调试器会将其显示为 null。好像同时将一个值重新分配给该属性作为一个空对象。我检查了默认的 OnGet 方法是否未激活。我只是不明白为什么价值会丢失以及如何防止它发生。
public async Task<IActionResult> OnPostDeleteItemAsync(int id){
CreatureItem item = Creature.Items.FirstOrDefault(x => x.ItemId == id);
if (item == null) return RedirectToPage("Creature");
await new EditCreature(_ctx).DeleteItem(Creature, id);
return Redirect(UrlString);
}
尝试了使用表单的解决方法,但我只能传递对象的 id 而不是整个对象。
<input type="hidden" asp-for="Creature.Id" /> works
<input type="hidden" asp-for="Creature" /> don't work
Git:
https://github.com/Mlorism/LastTemple/blob/master/LastTemple/Pages/Manage/Creature.cshtml
https://github.com/Mlorism/LastTemple/blob/master/LastTemple/Pages/Manage/Creature.cshtml.cs
【问题讨论】:
标签: asp.net-core properties razor-pages