ASP.NET Core编辑视图Save按钮无响应,无法触发控制器方法
问题排查与修复方案
核心问题1:HTML表单嵌套违规
HTML规范不允许表单嵌套,你的主表单<form asp-action="Edit">内部又嵌套了一个@using (Html.BeginForm()),这会导致浏览器无法正确识别主表单的提交事件,点击Save按钮时浏览器不会触发主表单的提交请求。
核心问题2:Checkbox未绑定模型
你的VAT注册状态复选框没有通过asp-for绑定到Contragent.VAT_Registration,导致该字段的值无法提交到控制器,同时可能触发模型验证失败(如果该字段是必填项)。
核心问题3:HTML结构不完整
代码中<div class="row gx-3 mb-3">标签未闭合,HTML结构错误会干扰表单的正常功能。
具体修复步骤
1. 移除表单嵌套,改用AJAX处理内部提交
将内部的嵌套表单替换为AJAX请求,保留“Зареди данни”按钮的功能,同时不破坏主表单结构:
<!-- 替换原有的嵌套表单代码 --> <div class="col-md-3"> <label asp-for="Contragent.VAT_Number" class="small mb-1">ДДС номер</label> <input id="vat_number" asp-for="Contragent.VAT_Number" name="checkEIK" class="form-control" type="text" readonly /> <button type="button" class="btn btn-outline-primary w-100" onclick="loadVIESData()">Зареди данни</button> <span asp-validation-for="Contragent.VAT_Number" class="text-danger"></span> </div>
然后在Scripts区块添加AJAX代码:
@section Scripts { @{await Html.RenderPartialAsync("_ValidationScriptsPartial");} <script> function loadVIESData() { var eik = $("#EIK").val(); $.ajax({ url: '@Url.Action("CreateVIES", "YourControllerName")', // 替换为你的实际控制器名称 type: "POST", data: { checkEIK: $("#vat_number").val(), eik: eik }, // 根据控制器参数调整 success: function(result) { $("#vat_number").val(result); // 根据接口返回结果处理赋值逻辑 }, error: function() { alert("加载数据失败"); } }); } </script> }
2. 修复Checkbox的模型绑定
将复选框改为绑定到模型字段,确保值能正确提交:
<div class="col-md-2"> <label asp-for="Contragent.VAT_Registration" class="control-label">Регистрация по ДДС*</label> <input type="checkbox" class="form-check-input" asp-for="Contragent.VAT_Registration" onclick="functionRegToVAT()"> </div>
3. 补全HTML结构,闭合未结束的标签
在VAT号码字段的</div>后添加</div>闭合row容器:
<!-- 原VAT号码字段的div结束后 --> </div> </div> <!-- 闭合row gx-3 mb-3 -->
4. 明确主表单的提交方法
编辑操作应该使用POST方法,为主表单添加asp-method="Post":
<form asp-action="Edit" asp-method="Post">
额外检查点
- 检查控制器的Edit Action是否接收POST请求,参数是否与模型匹配:
[HttpPost] public IActionResult Edit(Contragents_Countries_Roles_Categories model) { // 编辑逻辑处理 }
- 打开浏览器开发者工具(F12),切换到Network标签,点击Save按钮后查看是否有请求发出,若有错误可查看具体的错误信息。
内容的提问来源于stack exchange,提问作者Анатоли Велков
相关产品推荐
相关产品推荐

