我正在使用 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 永远不会在客户端上增加。

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

最佳答案

一旦您的 OnPost 方法完成并呈现相应的 View ,使用 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 属性中读取该值。

关于c# - 模型中 OnPost 中的更改绑定(bind)属性无效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53669863/

10-16 12:13