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/

相关文章:

c# - @Html.Value of(x=>x.Property Name) 和@Model.Property Name 有什么区别

javascript - 脚本在 mvc4 中不起作用

html - 奇怪的 IE11 HTML5 视频问题

javascript - 从 Webkit IFRAME(本地页面)获取 Qt QWebView Bridge 可访问的技巧

html - 我可以将 Gmail 地址实现为指向 png 的链接吗?

javascript - 根据变量使背景半彩色

html - 'Open Sans',无衬线在 mac 中看起来不同

c# - 从 Entity Framework 连接字符串创建 DataContext?

asp.net - 将 View 模型从 ajax 发送到 Controller

asp.net - CompareValidator 的间歇性错误 - ValueToCompare 属性为 ""