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

使用JavaScript验证表单时清空文本域提交无提示且页面刷新问题

问题原因及修复方案

1. 重复ID违反HTML规范

所有textarea使用了相同的id="mytextarea",ID必须页面唯一。浏览器对重复ID的元素处理可能出现异常,导致验证逻辑无法正确读取textarea的值,直接跳过验证提交表单。

修复:删除手动设置的重复ID,asp-for会自动生成唯一ID,不影响功能;也可以给每个textarea设置唯一ID(如id="nameTextarea"),但无需手动ID也能正常验证。

2. 缺少CSRF令牌导致后端拦截

ASP.NET Core的POST表单默认要求CSRF验证,未包含令牌时,后端会直接拦截请求,表现为页面刷新但验证逻辑未触发。另外,ID参数丢失是因为未将参数包含在表单内或通过路由传递。

修复:

  • 给表单添加asp-antiforgery="true"属性,或在表单内插入@Html.AntiForgeryToken(),确保CSRF验证通过。
  • 传递ID参数:添加隐藏字段<input type="hidden" asp-for="ModelExample.Id" />,或给表单添加asp-route-id="@Model.ModelExample.Id"属性绑定路由参数。

3. 内联事件绑定的潜在问题

内联onsubmit可能因上下文问题导致验证函数未正确执行,改用事件监听更可靠。

优化后的JS代码:

document.addEventListener('DOMContentLoaded', function() {
  const form = document.getElementById('MyForm');
  form.addEventListener('submit', function(event) {
    let allFilled = true;
    const textAreas = form.querySelectorAll('textarea');
    
    textAreas.forEach(textarea => {
      if (textarea.value.trim() === "") {
        allFilled = false;
      }
    });

    if (!allFilled) {
      alert("所有输入框都必须填写。");
      event.preventDefault();
      return false;
    }
  });
});

同时删除表单标签中的onsubmit="return validateForm(event)"属性。

修正后的表单示例

<form id="MyForm" method="post" asp-page-handler="C#MethodForSaving" asp-antiforgery="true" asp-route-id="@Model.ModelExample.Id">
  <!-- 隐藏字段传递ID -->
  <input type="hidden" asp-for="ModelExample.Id" />
  
  <div class="form-group">
    <label asp-for="ModelExample.Name"></label>
    <textarea class="form-control" asp-for="ModelExample.Name" rows="10" placeholder="Enter Name"></textarea>
  </div>
  <div class="form-group">
    <label asp-for="ModelExample.Name2"></label>
    <textarea class="form-control" asp-for="ModelExample.Name2" rows="10" placeholder="Enter Name"></textarea>
  </div>
  <div class="form-group">
    <label asp-for="ModelExample.Name3"></label>
    <textarea class="form-control" asp-for="ModelExample.Name3" rows="10" placeholder="Enter Name"></textarea>
  </div>
  <button type="submit" class="btn btn-primary">Save</button>
</form>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 18:44:57