问题描述:在前台,把一个bool量绑定给一个checkbox,当后台的值变更后,前台的checkbox状态没有同步更新,而只是单纯得保留提交表单时得状态。
重现步骤:
1. 利用VS创建一个asp.net core 6.0得项目。
controller:
public IActionResult TestArrayData(RedcodeModel model) { if (model == null) model = new(); if (model.ConditionType > 0) model.IsSkipLinked = true; else model.IsSkipLinked = false; return View("TestArrayData", model); }
view:
@model RedcodeModel <div> <form asp-controller="Configuration" asp-action="TestArrayData" method="post"> <input type="text" asp-for="ConditionType" value="@Model.ConditionType" /> <input type="checkbox" asp-for="IsSkipLinked" /> <label>@Model.IsSkipLinked</label> <div style="padding-top:10px"> <button type="submit" class="btn btn-lg btn-primary" style="width:250px">保存</button> </div> </form> </div>
model:
public class RedcodeModel { public int ConditionType { get; set; } = 1; public bool IsSkipLinked { get; set; } = false; }
测试结果:无论在文本框里输入1 还是 0, checkbox始终保持选中状态,当手动取消选中状态后,无论文本框里输入1 还是 0,checkbox始终保持未选中状态。
workaround:在提交时不提交checkbox,手动的把checkbox的name拿掉。
@model RedcodeModel <div> <form id="linkform" asp-controller="Configuration" asp-action="TestArrayData" method="post"> <input type="text" asp-for="ConditionType" value="@Model.ConditionType" /> <input type="checkbox" asp-for="IsSkipLinked" /> <label>@Model.IsSkipLinked</label> <div style="padding-top:10px"> <button type="button" class="btn btn-lg btn-primary" style="width:250px" onclick="queryLink()">保存</button> </div> </form> </div> <script> function queryLink() { $('input[name="IsSkipLinked"]').removeAttr('name'); $('#linkform').submit(); } </script>
终极解决方案待查。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)