模型中 OnPost 中的更改绑定属性无效
Posted
技术标签:
【中文标题】模型中 OnPost 中的更改绑定属性无效【英文标题】:Change Bound Property in OnPost in model is invalid 【发布时间】:2019-05-09 05:45:09 【问题描述】:我正在使用 ASP.NET Core Razor 页面,我想为用户完成任务所需的尝试次数添加一个计数器。
我正在使用:
[BindProperty]
public int Attempts get; set;
在OnPost
内部我正在这样做:
public IActionResult OnPost()
if(!IsCorrect())
Attempts++;
return Page();
return RedirectToPage($"./Index")
我希望这会更新客户端的数据,因为没有[BindProperty]
和return Page()
,如果模型无效,数据将会丢失。但是,Attempts
永远不会在客户端上增加。
我想我可能误解了它的工作原理?有什么建议吗?
【问题讨论】:
【参考方案1】:一旦您的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
值不存在时,该值将从您的PageModel
实现中的Attempts
属性中读取,正如预期的那样。
【讨论】:
以上是关于模型中 OnPost 中的更改绑定属性无效的主要内容,如果未能解决你的问题,请参考以下文章
模型更改时刷新 ViewModel 的所有属性的数据绑定的好方法