通过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验证器在后面的代码中不成立?的主要内容,如果未能解决你的问题,请参考以下文章

禁用的 asp.net 按钮禁用按钮验证

启用/禁用按钮

reactjs通过一个不起作用的功能启用禁用按钮

在后面的代码中向 Asp ListBox List Items 添加属性时出现问题

如何在后面的c#代码中将div添加到容器div

Bootstrap 模态对话框选项卡在后面的页面中