启用/禁用aspx验证器通过js在代码后面不保持true?

时间:2016-09-12 19:37:44

标签: javascript jquery asp.net validation customvalidator

我想知道我所遗漏的关于仅禁用这些通过js的内容,而不必在后面的代码中添加重复代码。

我使用此代码禁用/启用验证器:

$token = $securityContext->getToken();
$isFullyAuthenticated = $securityContext->isGranted('IS_AUTHENTICATED_FULLY');

它很好用,直到我回发来保存一些数据,...这些禁用的验证器没有被禁用。

所以如果IsPostBack为true,我必须在OnLoad()中运行一些重复的代码来禁用我已经通过js禁用的验证器。

编辑:删除任何代码,因为它不是获得答案所必需的。答:服务器端也必须禁用这些元素,由于以下原因无法明确完成:在此处找到,感谢@ConnersFan:https://msdn.microsoft.com/en-us/library/aa479045.aspx

  • 某些验证控件可能不支持客户端脚本。一个很好的例子:如果您使用的是带有服务器验证功能但没有客户端验证功能的CustomValidator。
  • 安全考虑因素。有人可以很容易地使用脚本获取页面并禁用或更改它。您不应该依赖脚本来阻止不良数据进入您的系统,只是为了向您的用户提供更直接的反馈。因此,如果您使用的是CustomValidator,则不应在没有相应服务器验证功能的情况下提供客户端验证功能。

1 个答案:

答案 0 :(得分:1)

正如您在ASP.NET Validation in Depth中所看到的,在客户端启用/禁用验证器的首选方法是使用ValidatorEnable

var validator = document.getElementById(id);
ValidatorEnable(validator, false);

在服务器端,您还必须明确启用/禁用验证器(我不认为您可以避免这种情况):

validator.Enabled = false;

此更改将保留在客户端代码中,与Javascript代码中的更改不同,后者未在回发中保留。