使用 JavaScript 禁用 ASP.NET 验证器

Posted

技术标签:

【中文标题】使用 JavaScript 禁用 ASP.NET 验证器【英文标题】:Disable ASP.NET validators with JavaScript 【发布时间】:2010-09-28 20:36:12 【问题描述】:

有谁知道如何? 我正在使用 javascript style.display = 'none' 禁用网页的某些部分。但是,这些禁用的部分具有仍在触发的 asp.net 验证器,我需要禁用它而不需要往返服务器。 谢谢。

【问题讨论】:

【参考方案1】:

使用这个sn-p:

function doSomething()

  var myVal = document.getElementById('myValidatorClientID');
  ValidatorEnable(myVal, false); 

【讨论】:

注意:这不适用于带有 Firefox 的 ASP.NET 1.1 ***.com/questions/3640183/… 另一个问题是验证器仍然在服务器端启用,这可能会给您下一次回发带来惊喜。 这会触发客户端验证。在 sn-p 中,使用:myVal.enabled = false;而不是 ValidatorEnable;禁用验证器【参考方案2】:

这是一个古老的问题,但对它没有给出的以下答案感到惊讶。我使用上面的 cmets 实现了它并且可以完美地工作

# enable validation
document.getElementById('<%=mytextbox.ClientID%>').enabled = true

#disable validation
document.getElementById('<%=mytextbox.ClientID%>').enabled = false

此实现可能有些棘手,因为请记住,如果 javascript 中有错误,代码将退出,但您不会收到任何错误。一些有用的点

    确保您可以设置断点并且可以单步执行代码。如果不重启浏览器。

    在放置此代码的函数的开头设置断点。单步执行代码,如果有错误,代码将退出,您将无法单步执行代码。

    在 firefox Firebug 中,您可以在控制台选项卡中键入整个 javascript 语句以查看语句返回的内容。最重要的是,您要检查控件的非空值。

【讨论】:

【参考方案3】:

此外,您可以将 Visible 属性设置为 false,而不是简单地隐藏元素...

whateverItem.Visible = false;

这使得该项目根本不会呈现到页面,我相信这会禁用验证。如果我错了,请有人纠正我。

【讨论】:

您是正确的,它不会呈现到页面,但这需要回发,而 Javascript 不需要。 不起作用。即使控件被隐藏,附加到它的验证器也会尝试对其进行验证【参考方案4】:

这样做的最佳方式,

function doSomething()

    var objvalidator = document.getElementById('myValidatorClientID');
    objvalidator.enabled = false;
    objvalidator.isvalid = true;
    ValidatorUpdateDisplay(objvalidator);

【讨论】:

【参考方案5】:

根据 Glenn G 的上述评论,我会使用

myVal.enabled = false; 

禁用验证器而不是

ValidatorEnable(myVal, false); 

这是我的经验:两个 sn-ps 在我的 2003 服务器上运行良好,带有 .net framework 2.0。但是,在带有 .net 框架 4.0 的服务器 2008 R2 上(我不确定是哪个导致了问题),我遇到了“ValidatorEnable”的意外行为。我的页面上有标签(用户控件),当我离开调用“ValidatorEnable”的标签时,它会暂时禁用下一个标签上的验证器(即使没有调用代码来禁用它们),直到下一次回发。

【讨论】:

我发现这个解决方案在框架 4.6.1 中更适合我,ValidatorEnable 给了我一个 Page.Validators 错误。 我还发现,如果我在代码中启用验证器并通过 JavaScript 禁用它们,它们仍然会在服务器上验证为 true。我在前端代码中禁用了它们,并创建了一个 JavaScript 函数,如果需要,它将启用验证器并在 Sys.Application.add_load 中运行它。验证器将客户端验证,然后处理服务器。如果它失败了,它会在客户端验证时失败,这对我来说已经足够了。【参考方案6】:

这里是关于如何从 JavaScript 控制 ASP.NET 验证器的详细文章:

How to control ASP.NET Validator Controls Client Side validation from JavaScript

【讨论】:

请在分享链接的同时分享相关代码...链接已失效!!!

以上是关于使用 JavaScript 禁用 ASP.NET 验证器的主要内容,如果未能解决你的问题,请参考以下文章

使用 javascript 和 asp.net 启用和禁用按钮

asp.net c#.net jquery / javascript 如何使用复选框启用或禁用 requiredfieldvalidator

asp.net 使用 Javascript 禁用/启用验证器

检测何时在 ASP.NET 中禁用 JavaScript

检测ASP.NET中禁用JavaScript的时间

使用来自javascript的动态ID启用/禁用Telerik asp.net组合框