模型中 OnPost 中的更改绑定属性无效

Ash*_*ams 6 c# asp.net-core razor-pages asp.net-core-2.1

我正在使用 ASP.NET Core Razor Pages,我想为用户完成任务所需的尝试次数添加一个计数器。

我在用:

[BindProperty]
public int Attempts { get; set; }
Run Code Online (Sandbox Code Playgroud)

在里面OnPost我正在这样做:

public IActionResult OnPost()
{
   if(!IsCorrect())
   {
       Attempts++;
       return Page();
   }

   return RedirectToPage($"./Index")
}
Run Code Online (Sandbox Code Playgroud)

我希望这会更新客户端的数据,因为如果没有[BindProperty]& return Page(),如果模型无效,数据就会丢失。但是,Attempts永远不会在客户端上增加。

我想我可能误解了这是如何工作的?有什么建议么?

Kir*_*kin 6

一旦您的方法完成并且呈现相应的视图,使用标记帮助器(或旧方法)OnPost的控件中显示的值将从 重新填充。这意味着即使您为 设定一个新值,它也不会被使用,因为该键中存在一个值。asp-forHtmlHelperModelStateAttemptsModelStateAttempts

解决此问题的一种方法是清除存储在 中的值ModelState,使用如下所示:

public IActionResult OnPost()
{
    if (!IsCorrect())
    {
        ModelState.Remove(nameof(Attempts));
        Attempts++;
        return Page();
    }

    return RedirectToPage("./Index");
}
Run Code Online (Sandbox Code Playgroud)

当值不存在时,将按预期从实现上的属性ModelState中读取该值。AttemptsPageModel