【问题标题】:Page model losing it's assigned object value. ASP.NET Razor Page页面模型失去了分配的对象值。 ASP.NET 剃刀页面
【发布时间】: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


    【解决方案1】:

    PageModel 的属性不会在请求之间存储。即使您在GET 请求中分配了一个属性,它也不会在POST 请求中出现,因为这是两个不同的请求。在POSTCreature 期间,属性为空,因为它是来自请求的bound,但没有发送数据。您的“解决方法”解决了这个问题,它根据请求发送数据以用值填充 Creature 属性。此外,这不是解决方法,这就是事情应该如何工作的方式。

    如果你想实例化一个属性,你需要通过表单传递一些值,或者如果它是一个 GET 请求,则查询参数。

    【讨论】:

      猜你喜欢
      • 2019-05-09
      • 1970-01-01
      • 2018-09-18
      • 2020-05-22
      • 2020-07-13
      • 2019-01-11
      • 1970-01-01
      • 2020-11-09
      • 1970-01-01
      相关资源
      最近更新 更多