当触发 onPost() 时,Razor Pages public 字段变为 NULL

Razor Pages public field becomes NULL when onPost() triggered

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

现在我尝试添加 GameBoard[] GameBoards 并初始化单个 Gameboard[0]GameBoard[ OnGet() 中的数组中的 1]。每当 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();
    }
}

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

因为你只需要4条数据来构造你的数组,你应该考虑使用隐藏字段来存储参数值,它会在回传时包含在表单中。