我正在使用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
在客户端上永远不会增加。
我想我可能误会了它的工作原理?有什么建议吗?
答案 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
属性中读取该值。