【问题标题】:Disable form Submit based on validation禁用基于验证的表单提交
【发布时间】:2018-02-12 23:42:20
【问题描述】:

我正在学习 ASP.NET Core (v 2.0)。有一个带有几个输入文本框和一个提交按钮的表单。我只想允许用户提交有效的表单,所以当表单不完整时,我希望禁用提交按钮。

有没有办法使用 ASP.NET Core model validation 轻松做到这一点?

谢谢。

【问题讨论】:

  • 如果您正确设置了客户端验证,则如果表单无效,则不会提交表单(并且将显示验证消息)。您没有“禁用”提交按钮)。你需要做一些基础研究 - Adding validation.
  • Stephen Muecke,我知道表单不会提交。但这是一个常见的 UX 工作流程——在表单有效之前,提交按钮处于禁用状态。使用 Angular 等其他框架很容易做到。
  • 这不是一个常见的 UX 工作流程(至少在 mvc 中不是)。如果您设置了客户端验证,那么在您提交表单之前不会触发“最终”验证(如果表单无效并显示所有消息,则会取消该验证),因此您需要一些东西来触发提交,所以禁用提交按钮没有意义。

标签: asp.net-mvc asp.net-core


【解决方案1】:

ASP.NET MVC 中没有任何内置功能可以自动为您执行此操作。您询问的 UI 模式需要 JavaScript 编码。

您可以下载并引用一个验证库,例如jQuery Validation Plugin。然后在您的页面中编写一些 JavaScript,通过检查 $("#myForm").valid() 来检查每个表单输入的 blur 上的表单是否有效,并且只有在表单有效时才启用提交按钮。

示例见附件 sn-p。

var $form = $("#myform");
var $submitbutton = $("#submitbutton");

$form.on("blur", "input", () => {
  if ($form.valid()) {
    $submitbutton.removeAttr("disabled");   
  } else {
    $submitbutton.attr("disabled", "disabled");
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js"></script>

<form id="myform">
  <input type="text" name="text1" required />
  <br/>
  <input type="text" name="text2" required />
  <br/>
  <button type="submit" id="submitbutton" disabled>Submit Enabled When Valid</button>
</form>

【讨论】:

  • asp.net-mvc 自动包含jquery.validate.js :) 并且由于它将novalidate 添加到&lt;form&gt;,所以required 属性没有意义
  • Joe Wilson 好的,它可以工作,但是在你聚焦所有项目之前,有什么方法不会触发。我的意思是现在我们有 2 个输入,首先你聚焦并发短信,但是在模糊之后,它触发了第二个文本框,即使它在用户填充路径中。你能推荐我任何解决方案吗?
  • $form.on("blur keyup change",对我有帮助
猜你喜欢
  • 1970-01-01
  • 2012-10-18
  • 2019-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-24
  • 1970-01-01
相关资源
最近更新 更多