模型中 OnPost 中的更改绑定 属性 无效
Change Bound Property in OnPost in model is invalid
我正在使用 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
方法完成并呈现相应的视图,使用 asp-for
Tag Helper(或旧的 HtmlHelper
方法)的控件中显示的值是从 ModelState
重新填充。这意味着即使您为 Attempts
设置了一个新值,它也不会被使用,因为 ModelState
中存在一个值 Attempts
键。
解决此问题的一种方法是清除存储在 ModelState
中的值,方法如下:
public IActionResult OnPost()
{
if (!IsCorrect())
{
ModelState.Remove(nameof(Attempts));
Attempts++;
return Page();
}
return RedirectToPage("./Index");
}
当 ModelState
值不存在时,将按预期从 PageModel
实现的 Attempts
属性 中读取该值。
我正在使用 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
方法完成并呈现相应的视图,使用 asp-for
Tag Helper(或旧的 HtmlHelper
方法)的控件中显示的值是从 ModelState
重新填充。这意味着即使您为 Attempts
设置了一个新值,它也不会被使用,因为 ModelState
中存在一个值 Attempts
键。
解决此问题的一种方法是清除存储在 ModelState
中的值,方法如下:
public IActionResult OnPost()
{
if (!IsCorrect())
{
ModelState.Remove(nameof(Attempts));
Attempts++;
return Page();
}
return RedirectToPage("./Index");
}
当 ModelState
值不存在时,将按预期从 PageModel
实现的 Attempts
属性 中读取该值。