通过js启用/禁用aspx验证器在后面的代码中不成立?
Posted
技术标签:
【中文标题】通过js启用/禁用aspx验证器在后面的代码中不成立?【英文标题】:Enable/Disable aspx Validator via js not holding true in code behind? 【发布时间】:2017-01-20 07:41:11 【问题描述】:我想知道我在仅通过 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,则不应提供没有相应服务器验证功能的客户端验证功能。【问题讨论】:
【参考方案1】:正如您在ASP.NET Validation in Depth 中看到的,在客户端启用/禁用验证器的首选方法是使用ValidatorEnable
:
var validator = document.getElementById(id);
ValidatorEnable(validator, false);
在服务器端,您还必须显式启用/禁用验证器(我认为您无法避免):
validator.Enabled = false;
此更改将保留在客户端代码中,不像 javascript 代码中的更改不会在回发时保留。
【讨论】:
我很欣赏首选的方法,我已经在我的代码中应用了这个方法,删除了旧的“属性设置”方式,但没有成功。我看到了同样的行为。 - 想法? @ConnersFan - 公平地说,新的 Preferred 方法是多余的,但行为没有改变。 - 谢谢。 @ConnersFan,好的 - 我注意到当我这样做时它有效,你可以链接指定这个的文档吗? - 感谢您的确认。 (遗憾的是它在 js 中没有明确的工作) 不客气。我在服务器端添加了一个关于更改的注释(最后一个我没有具体的参考,我只是在测试时观察它)。以上是关于通过js启用/禁用aspx验证器在后面的代码中不成立?的主要内容,如果未能解决你的问题,请参考以下文章