Enable/Disable 通过 js 的 aspx 验证器在后面的代码中不成立?
Enable/Disable aspx Validator via js not holding true in code behind?
我想知道关于仅通过 js 禁用这些,而不必在后面的代码中添加重复代码,我遗漏了什么。
我正在使用此代码禁用/启用验证器:
validator: {
enable: function (id) {
console.log('enable',id);
var validator = document.getElementById(id);
ValidatorEnable(validator, true);
},
disable: function (id) {
console.log('disable',id);
var validator = document.getElementById(id);
ValidatorEnable(validator, false);
}
},
它工作得很好,直到我进行回发以保存一些数据,......这些禁用的验证器没有被禁用。
所以如果 IsPostBack 为真,我必须 运行 OnLoad() 中的一些重复代码来禁用我已经通过 js 禁用的验证器。
编辑:删除了所有代码,因为它不是获得答案所必需的。回答:服务器端还必须禁用这些元素,由于以下原因无法明确完成:在这里找到,感谢@ConnersFan:https://msdn.microsoft.com/en-us/library/aa479045.aspx
- 一些验证控件可能不支持客户端脚本。一个很好的例子:如果您使用带有服务器验证功能但没有客户端验证功能的 CustomValidator。
- 安全考虑。有人可以很容易地获取带有脚本的页面并禁用或更改它。您不应该依赖脚本来阻止不良数据进入您的系统,而只是为了向您的用户提供更即时的反馈。因此,如果您使用的是 CustomValidator,则不应在没有相应服务器验证功能的情况下提供客户端验证功能。
如您在 ASP.NET Validation in Depth 中所见,enable/disable 客户端验证器的首选方法是使用 ValidatorEnable
:
var validator = document.getElementById(id);
ValidatorEnable(validator, false);
在服务器端,您还必须 enable/disable 显式验证器(我认为您无法避免):
validator.Enabled = false;
此更改将保留在客户端代码中,这与 Javascript 代码中的更改不同,后者不会在回发时保留。
我想知道关于仅通过 js 禁用这些,而不必在后面的代码中添加重复代码,我遗漏了什么。
我正在使用此代码禁用/启用验证器:
validator: {
enable: function (id) {
console.log('enable',id);
var validator = document.getElementById(id);
ValidatorEnable(validator, true);
},
disable: function (id) {
console.log('disable',id);
var validator = document.getElementById(id);
ValidatorEnable(validator, false);
}
},
它工作得很好,直到我进行回发以保存一些数据,......这些禁用的验证器没有被禁用。
所以如果 IsPostBack 为真,我必须 运行 OnLoad() 中的一些重复代码来禁用我已经通过 js 禁用的验证器。
编辑:删除了所有代码,因为它不是获得答案所必需的。回答:服务器端还必须禁用这些元素,由于以下原因无法明确完成:在这里找到,感谢@ConnersFan:https://msdn.microsoft.com/en-us/library/aa479045.aspx
- 一些验证控件可能不支持客户端脚本。一个很好的例子:如果您使用带有服务器验证功能但没有客户端验证功能的 CustomValidator。
- 安全考虑。有人可以很容易地获取带有脚本的页面并禁用或更改它。您不应该依赖脚本来阻止不良数据进入您的系统,而只是为了向您的用户提供更即时的反馈。因此,如果您使用的是 CustomValidator,则不应在没有相应服务器验证功能的情况下提供客户端验证功能。
如您在 ASP.NET Validation in Depth 中所见,enable/disable 客户端验证器的首选方法是使用 ValidatorEnable
:
var validator = document.getElementById(id);
ValidatorEnable(validator, false);
在服务器端,您还必须 enable/disable 显式验证器(我认为您无法避免):
validator.Enabled = false;
此更改将保留在客户端代码中,这与 Javascript 代码中的更改不同,后者不会在回发时保留。