asp.net - 如何使 HTML5 input required 属性与 .NET 一起运行?

标签 asp.net html

我正在使用 ASP.NET 4。

我的用户界面依赖于使用更新面板。更新某些 UI 元素需要一个由 ScripManager 处理的 PostBack。基本的东西。这些操作发生在提交字段之前。

问题来自于必须处理的 HTML5 标记。

<input type="text" id="foo" aria-required="true" required>

使用 .NET TextBox 控件并添加属性,我得到了这样的呈现代码:

<input name="foo" type="text" id="foo" aria-required="true" required="required" />

HTML5 的行为是每次发生 PostBack 时,输入字段认为它应该提醒用户,因为该字段中没有值,即使用户在 UI 中执行其他操作也是如此。

有没有办法控制这种 HTML5 行为,使 INPUT 字段忽略 PostBack?

最佳答案

ASP.NET Web 表单有点奇怪,因为整个页面都是一个“表单”,并且回发是为了触发服务器端事件,而不是简单地提交表单数据。当表单“提交”事件被触发时,HTML 表单验证 API 将尝试验证表单的全部内容。在这种情况下,您触发的提交事件实际上不是表单提交 - 因此验证行为是不正确的。

有几种方法可以解决这个问题。

  1. 您可以添加 "formnovalidate" attribute所有按钮和输入类型为触发回发但实际上不提交表单的提交元素。可以使用 inputElement.formNoValidate 属性以及使用 jQuery 和 JavaScript 属性方法通过 JavaScript 更改此设置。

  2. 您可以添加 "novalidate" attribute到表单元素以完全避免客户端验证,同时在所涉及的输入元素的属性背后具有语义含义 - 可能使用类似 jQuery validation 的东西在提交时自己验证表单,或使用 validityState API在 JavaScript 中执行完全自定义的验证。

  3. 您可以有条件地添加和删除“required”属性,并使用 jQuery 或 native JavaScript 更改“aria-required”的值,以便这些仅在流程的表单提交阶段出现。

  4. 您可以有条件地向表单元素添加和删除“novalidate”属性,或设置 formElement.noValidate 属性以确定是否进行客户端验证。

关于asp.net - 如何使 HTML5 input required 属性与 .NET 一起运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25493070/

相关文章:

jquery - 在 jquery 移动中添加数据后,css 和 min js 没有得到应用

html - css block 链接和图像

html - 边框不覆盖图片

asp.net - .NET Core RC2 applicationhost.config 与 ASP.NET .NET 4.6 不兼容?

c# - ThreadAbortException 有什么特别之处?

asp.net - 为什么我修改后的 JavaScript 没有出现在调试器中?

php - CSS 类无法正常工作

javascript - 单击链接并到达特定页面部分时 jQuery 交换 Logo

c# - WebForms 将 CheckboxList 值传递给 List<T>

asp.net - 如何突出显示 Gridview 中的最大值