如何解决页面模型丢失其分配的对象值 ASP.NET Razor 页面
当我选择项目时 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
解决方法
PageModel
的属性不会在请求之间存储。即使您在 GET
请求中分配了一个属性,它也不会在 POST
请求中出现,因为这是两个不同的请求。在 POST
期间 Creature
属性为空,因为它是来自请求的 bound 但没有发送数据。您的“解决方法”解决了这个问题,它会根据请求发送数据以使用值填充 Creature
属性。此外,这不是解决方法,这是事情应该如何运作。
如果您想要实例化一个属性,您需要通过表单传递一些值,或者如果它是一个 GET
请求,则需要传递一些查询参数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。