You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 03:46:05