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

时间:2018-12-07 12:46:29

标签: c# asp.net-core asp.net-core-2.1

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

我正在使用:

[BindProperty]
public int Attempts { get; set; }

OnPost中,我正在这样做:

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

   return RedirectToPage($"./Index")
}

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

我想我可能误会了它的工作原理?有什么建议吗?

1 个答案:

答案 0 :(得分:0)

完成OnPost方法并呈现相应的“视图”后,将使用以下方法重新填充使用asp-for标记助手(或更旧的HtmlHelper方法)的控件中显示的值ModelState。这意味着即使您正在为Attempts设置新值,也不会使用它,因为使用ModelState键在Attempts中存在一个值。

解决此问题的一种方法是使用类似以下的方法清除存储在ModelState中的值:

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

    return RedirectToPage("./Index");
}

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