ASP.Net从2.0升级到4.0+;给出JavaScript运行时错误:无法获取属性';验证器';指未定义的或空的引用

ASP.Net从2.0升级到4.0+;给出JavaScript运行时错误:无法获取属性';验证器';指未定义的或空的引用,javascript,asp.net,webforms,requiredfieldvalidator,Javascript,Asp.net,Webforms,Requiredfieldvalidator,情况是这样的。我们的内部网站正在从ASP.NET2.0升级到4.0(我也尝试了4.5和4.6,希望在这些版本中得到修复)。我们有一个用于客户端签名的签名板,但它只适用于IE11或更早版本,因为它使用ActiveX控件。因此,基本上,在我们切换签名板之前,我们只能使用IE 11 现在,当一个控件执行服务器端回发并且它附加了一个验证程序控件(通常为requiredfieldvalidator)时,它将给出以下错误: JavaScript运行时错误:无法获取未定义或空引用的属性“Validators”

情况是这样的。我们的内部网站正在从ASP.NET2.0升级到4.0(我也尝试了4.5和4.6,希望在这些版本中得到修复)。我们有一个用于客户端签名的签名板,但它只适用于IE11或更早版本,因为它使用ActiveX控件。因此,基本上,在我们切换签名板之前,我们只能使用IE 11

现在,当一个控件执行服务器端回发并且它附加了一个验证程序控件(通常为requiredfieldvalidator)时,它将给出以下错误:

JavaScript运行时错误:无法获取未定义或空引用的属性“Validators”

这是它给出错误的javascript方法(在我粗体显示的行中失败):

函数ValidatorOnChange(事件){
event=event | | window.event;
Page_InvalidControlToBeFocused=null;
var目标控制;
if((typeof(event.srcmelement)!=“undefined”)&&(event.srcmelement!=null)){
targetedControl=event.src元素;
}
否则{
targetedControl=event.target;
}
var VAL;
if(typeof(targetedControl.Validators)!=“undefined”){//here
VAL=targetedControl.Validators;
}
否则{
if(targetedControl.tagName.toLowerCase()=“标签”){
targetedControl=document.getElementById(targetedControl.htmlFor);
VAL=targetedControl.Validators;
}
}
if(VAL){
对于(变量i=0;i
我在网上到处寻找答案,但运气不好。该错误会阻止页面进入服务器端代码。我可以通过在validator标记中设置enableclientscript=false来解决这个问题,但我希望有更好更快的选项

谢谢


Tim

我认为您的targetedControl未定义为值。这就是为什么当您试图访问targetedControl.Validators时,会出现错误。试着让调试器保持检查状态。还包括确保获得targetedControl值的条件我知道targetedControl未定义。我已经调试过了,但问题是所有这些代码都在ASP.Net框架附带的Validator控件中。据我所知,真的没有办法访问或更改它。在我从ASP.NET2.0升级之前,它在IE10或11上运行良好。我希望有一个SP或修补程序来解决这个问题。fwiw:您是否尝试过在代码背后使用
if(Page.IsValid).
?也许它能帮你追踪一些东西…也许不是在js里。另一个随机性:查看trace
您的url.aspx/trace.axd
中是否显示任何内容(需要在web.config中显示)。以下是更新。是的,我最后也检查了服务器端的验证,因为客户端验证程序给了我javascript错误。我最终将enableclientscript设置为false,因为否则会出现js错误,它们会阻止服务器端代码运行。某些使用验证程序的服务器控件(下拉框和复选框)导致了错误,但某些没有(单选按钮)。我认为您的targetedControl未定义为值。这就是为什么当您试图访问targetedControl.Validators时,会出现错误。试着让调试器保持检查状态。还包括确保获得targetedControl值的条件我知道targetedControl未定义。我已经调试过了,但问题是所有这些代码都在ASP.Net框架附带的Validator控件中。据我所知,真的没有办法访问或更改它。在我从ASP.NET2.0升级之前,它在IE10或11上运行良好。我希望有一个SP或修补程序来解决这个问题。fwiw:您是否尝试过在代码背后使用
if(Page.IsValid).
?也许它能帮你追踪一些东西…也许不是在js里。另一个随机性:查看trace
您的url.aspx/trace.axd
中是否显示任何内容(需要在web.config中显示)。以下是更新。是的,我最后也检查了服务器端的验证,因为客户端验证程序给了我javascript错误。我最终将enableclientscript设置为false,因为否则会出现js错误,它们会阻止服务器端代码运行。某些使用验证程序的服务器控件(下拉框和复选框)导致了错误,但某些控件没有(单选按钮)。
function ValidatorOnChange(event) {
    event = event || window.event;
    Page_InvalidControlToBeFocused = null;
    var targetedControl;
    if ((typeof(event.srcElement) != "undefined") && (event.srcElement != null)) {
        targetedControl = event.srcElement;
    }
    else {
        targetedControl = event.target;
    }
    var vals;
    if (typeof(targetedControl.Validators) != "undefined") { // here
        vals = targetedControl.Validators;
    }
    else {
        if (targetedControl.tagName.toLowerCase() == "label") {
            targetedControl = document.getElementById(targetedControl.htmlFor);
            vals = targetedControl.Validators;
        }
    }
    if (vals) {
        for (var i = 0; i < vals.length; i++) {
            ValidatorValidate(vals[i], null, event);
        }
    }
    ValidatorUpdateIsValid();
}