【问题标题】:Razor Pages public field becomes NULL when onPost() triggered触发 onPost() 时 Razor Pages 公共字段变为 NULL
【发布时间】:2022-01-06 07:12:44
【问题描述】:

Razor 页面的初学者,希望有人可以帮助我。 我在 html 上有输入表单,它绑定到 GameConfig Game 的某些字段(完美运行)。所有字段都已更新,我可以将游戏保存在数据库中。

现在我试图添加 GameBoard[] GameBoards 并在 GameBoard[0] 中的数组中初始化单个 GameBoard[1] em>OnGet()。每当 onPost() 被触发 Gameboard[0] 并且 GameBoard[1] 变为 NULL。我不明白为什么会这样。

我只想更新 onPost() 中的 GameConfig Game,还要在 GameBoards 中添加坐标。

提前感谢您的帮助!

public class StartModel : PageModel
{
    private readonly AppDbContext _context;

    [BindProperty] public GameConfig Game { get; set; }

    public GameBoard[] GameBoards = new GameBoard[2];

    public StartModel(AppDbContext context)
    {
        _context = context;
    }

    public async Task<IActionResult> OnPostAsync(int id)
    {
        Game = await _context.GameConfigs
            .FirstAsync(m => m.GameConfigId == id);

        // TODO: Update some information on GameBoards
        
        _context.GameConfigs.Update(Game);
        await _context.SaveChangesAsync();

        return Page();
    }

    public async Task<IActionResult> OnGet(int? id)
    {
        Game = await _context.GameConfigs
            .FirstAsync(m => m.GameConfigId == id);

        GameBoards[0] = new GameBoard(Game.BoardSizeX, Game.BoardSizeY);
        GameBoards[1] = new GameBoard(Game.BoardSizeX, Game.BoardSizeY);

        return Page();
    }
}

【问题讨论】:

    标签: c# .net razor-pages


    【解决方案1】:

    每个请求都会初始化一个全新的 StartModel 实例。页面不会跨请求维护状态。这就是网络的工作方式——它在设计上是无状态的。如果要跨请求保持状态,则必须实施自己的状态管理策略。您有很多选择:https://www.learnrazorpages.com/razor-pages/state-management

    由于您只需要 4 条数据来构建您的数组,因此您应该考虑使用隐藏字段来存储参数值,这些参数值将在回发时包含在表单中。

    【讨论】:

      猜你喜欢
      • 2021-07-27
      • 2021-05-07
      • 2020-11-18
      • 1970-01-01
      • 2019-01-16
      • 2019-02-26
      • 2018-11-07
      • 2015-07-17
      • 1970-01-01
      相关资源
      最近更新 更多