【问题标题】:Enable/Disable aspx Validator via js not holding true in code behind?通过js启用/禁用aspx验证器在后面的代码中不成立?
【发布时间】: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,则不应提供没有相应服务器验证功能的客户端验证功能。

【问题讨论】:

    标签: javascript jquery asp.net validation customvalidator


    【解决方案1】:

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

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

    在服务器端,您还必须显式启用/禁用验证器(我认为您无法避免):

    validator.Enabled = false;
    

    此更改将保留在客户端代码中,不像 Javascript 代码中的更改不会在回发时保留。

    【讨论】:

    • 我很欣赏首选的方法,我已经在我的代码中应用了这个方法,删除了旧的“属性设置”方式,但没有成功。我看到了同样的行为。 - 想法?
    • @ConnersFan - 公平地说,新的 Preferred 方法是多余的,但行为没有改变。 - 谢谢。
    • @ConnersFan,好的 - 我注意到当我这样做时它有效,你可以链接指定这个的文档吗? - 感谢您的确认。 (遗憾的是它在 js 中没有明确的工作)
    • 不客气。我在服务器端添加了一个关于更改的注释(最后一个我没有具体的参考,我只是在测试时观察它)。
    猜你喜欢
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多