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

ASP.NET MVC提交表单后@Html.EditorFor控件值不更新问题求助

问题根因

ASP.NET MVC的HtmlHelper方法(比如@Html.EditorFor)渲染表单字段时,会优先读取ModelState中存储的POST提交原始值,而非你在控制器中修改后的Model属性值。即使你给obm.BrutoPlata赋了新值,返回视图时仍然会加载提交前的旧值,所以输入框不会更新。


解决方案

方案1:服务端提交后更新(适配现有Sacuvaj按钮提交逻辑)

  1. 修改控制器Post动作代码,在给Model属性赋值前清空ModelState缓存,也可以仅移除需要更新的字段缓存,性能更高:
[HttpPost]
public ActionResult dodajObracun(obracunModel obm, string btn)
{
    if(btn == "Izracunaj")
    {
        ViewBag.Message = "KLIKNUO SI IZRACUNAJ";
        return View();
    }
    try
    {
        if(ModelState.IsValid)
        {
            // 原有数据库逻辑保留
        }
        // 新增:清空ModelState缓存,让视图优先读取修改后的Model值
        // 仅需更新BrutoPlata的话可以写:ModelState.Remove("BrutoPlata");
        ModelState.Clear();
        
        decimal plata = obm.fondCasova * 183;
        obm.osnNetoZarada = plata;
        obm.netoOsnovica = 100;
        ViewBag.Message = plata;
        obm.BrutoPlata = plata;

        // 注意要把修改后的Model对象传给视图
        return View(obm);
    }
    catch
    {
        ViewBag.Message = "Obracun nije upisan u bazu";
        return View();
    }
}
  1. 修正视图中BrutoPlata字段的渲染代码,和其他字段保持结构一致,避免样式错乱:
<!-- 替换原来裸写的@Html.EditorFor(model => model.BrutoPlata) -->
<div class="form-group">
    @Html.LabelFor(model => model.BrutoPlata, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EditorFor(model => model.BrutoPlata, new { htmlAttributes = new { @class = "form-control" } })
    </div>
</div>

方案2:前端实时计算(可选,无需提交服务器即可刷新结果)

如果不需要每次计算都走服务端,可以直接在视图底部加一段JS代码实现实时计算,用户体验更好:

<script>
// 监听工时输入框变化自动计算
document.querySelector('input[name="fondCasova"]').addEventListener('input', function(){
    const fondCasova = parseFloat(this.value) || 0;
    document.querySelector('input[name="BrutoPlata"]').value = (fondCasova * 183).toFixed(2);
});
// 点击Izracunaj按钮触发计算
document.querySelector('input[name="izracunaj"]').addEventListener('click', function(){
    const fondCasova = parseFloat(document.querySelector('input[name="fondCasova"]').value) || 0;
    document.querySelector('input[name="BrutoPlata"]').value = (fondCasova * 183).toFixed(2);
});
</script>

内容的提问来源于stack exchange,提问作者98andrejevic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:45:03