模型中 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 中的更改绑定属性无效的主要内容,如果未能解决你的问题,请参考以下文章

WPF DataGrid 多选绑定

模型更改时刷新 ViewModel 的所有属性的数据绑定的好方法

如何将JProgressbar绑定到Bean类的属性

绑定到 DataTemplate 中的视图模型属性

通过 AngularJS 中的模型绑定更改 Kendo 图表类型

什么是双向绑定?