ASP.NET Core中Post提交后Model属性值未更新的问题
问题原因及解决方案
核心问题
ASP.NET Core 返回视图时,会优先从 ModelState 中读取表单字段值,而非你修改后的模型属性值。ModelState 会保留用户提交的原始数据,默认用于表单回显,所以直接修改 model 的属性不会在视图中生效。
解决步骤
1. 清除对应字段的 ModelState 状态
在修改模型属性前,移除或清除 ModelState 中对应字段的记录,让视图从更新后的模型取值:
修改后的控制器代码:
[HttpPost("Update")] public async Task<IActionResult> Update(BTMConversionEntryViewModel model) { try { // 清除AtmId和ATMName的ModelState记录,也可用ModelState.Clear()清除全部 ModelState.Remove("AtmId"); ModelState.Remove("ATMName"); model.AtmId = 0; model.ATMName = "New Name"; return View("Index", model); } catch (Exception ex) { return BadRequest($"An error occurred updating the btm xref."); } }
注意:你的控制器参数用了
ATMViewModel,但定义的模型类是BTMConversionEntryViewModel,需保证模型类一致,否则会出现参数绑定异常。
2. 修正视图中的验证字段错误
你的视图里存在字段名匹配错误:
<span asp-validation-for="@Model.IndividualName" class="text-danger"></span>
应改为:
<span asp-validation-for="@Model.ATMName" class="text-danger"></span>
否则验证错误提示会绑定到不存在的字段,无法正确显示ATMName的验证信息。
3. 额外说明
如果需要重置所有字段,也可以直接调用 ModelState.Clear() 清除整个ModelState,但这样会丢失所有验证状态,适合不需要保留原有验证提示的场景。
内容的提问来源于stack exchange,提问作者Cef
相关产品推荐
相关产品推荐

