如何使HTML5输入必需属性与.NET一起运行?

时间:2014-08-25 19:33:26

标签: asp.net html5

我正在使用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?

1 个答案:

答案 0 :(得分:3)

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

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

  1. 您可以将"formnovalidate" attribute添加到所有按钮,并输入类型提交元素,这些元素会触发回发但不会实际提交表单。可以使用inputElement.formNoValidate属性以及使用jQuery和JavaScript属性方法来改变这一点。

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

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

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