当前位置:  开发笔记 > 编程语言 > 正文

有没有办法让ValidationSummary与客户端验证器一起使用?

如何解决《有没有办法让ValidationSummary与客户端验证器一起使用?》经验,为你挑选了1个好方法。

.NET ValidationSummary控件聚合来自在回发时触发的验证程序的错误消息.有没有办法让它也显示来自客户端验证器的错误消息?

我正在处理的问题是,在长页面上,可以单击提交按钮,让某些客户端验证器失败,但从不会看到错误消息.我想在按钮附近有一个验证摘要,这样用户永远不会没有反馈.

我希望任何具有客户端验证的标准.NET验证器都会反映在验证摘要中,但我最关心的是让RequiredFieldValidators工作.

我可以破解它,以便在短暂延迟后点击按钮会自动显示一条消息,告诉用户检查页面上的错误.这适用于没有发生回发的情况,但这会很难看.

以下是一些不适合我的示例代码:





验证器显示错误而没有回发,但摘要没有.

正如评论中所建议的那样,页面上可能还有其他东西可以阻止我的示例代码工作.我现在无法重现确切的原因,虽然页面很重,并且有一些UpdatePanels,所以我会坚持我的黑客,直到有更多的时间来处理它.

感谢您的帮助.我建议人们不再处理这个问题,因为我认为我没有提供足够的信息来真正帮助任何人解决问题.



1> James..:

我也遇到过这个问题.在花费太多时间解析MS客户端验证API之后;),我将问题追溯到DOM解析的一个奇怪问题,下面我解释为什么在某些情况下会发生这种情况以及我用来修复它的解决方案.

[为什么会这样?]

每个验证器控件都呈现为具有非标准属性的span,用于执行客户端验证.例如,下面的evaluatefunction属性:

*

这些属性由API中的框架解析,如下所示(注意eval):

for (i = 0; i < Page_Validators.length; i++) {
  val = Page_Validators[i];
  if (typeof(val.evaluationfunction) == "string") {
     eval("val.evaluationfunction = " + val.evaluationfunction + ";");
     } 
}

问题是特殊属性,即评估函数,我们总是返回undefined,因此字符串永远不会转换为正确的验证器对象.这对我来说仍然是一个谜,因为据我所知它似乎是完全随机的.

当Page_ClientValidate被启动时会发生什么,它会尝试调用每个验证器验证函数,但它不能因为evaluatefunction == undefined.它不是使用false作为默认值,而是假定为true,因此实际上不会进行验证,并且所有内容在客户端都显示为有效.在如果(typeof运算(val.evaluationfunction)=="功能") ,以便它倒在事先分配是不正确的val.isvalid = TRUE; .

function ValidatorValidate(val, validationGroup, event) {
 val.isvalid = true;
 if ((typeof(val.enabled) == "undefined" || val.enabled != false) && IsValidationGroupMatch(val, validationGroup)) 
 {
  if (typeof(val.evaluationfunction) == "function") 
  {
   val.isvalid = val.evaluationfunction(val);
   if (!val.isvalid && Page_InvalidControlToBeFocused == null && typeof(val.focusOnError) == "string" && val.focusOnError == "t") 
   {
    ValidatorSetFocus(val, event);
   }
  }
 }
  ValidatorUpdateDisplay(val);
} 

[我是怎么解决的?]

为了解决这个问题,我写了一个可以在DOM加载完成后调用的例程.此例程循环所有验证器控件并尝试使用JQuery从SPAN中的原始标记数据创建对象属性,尽管您可以使用任何其他等效工具来获得相同的结果.此例程不会修复所有验证程序控件,主要是必需的字段验证程序和正则表达式验证程序.如果您使用具有其他属性的其他验证控件,则需要更改它.

function fixValidatorProperties()
{
    if (Page_Validators && Page_Validators[0] && Page_Validators[0].evaluationfunction == undefined)
    {
        var val = null;
        for (i = 0; i < Page_Validators.length; i++) 
        {
            val = Page_Validators[i];

            if (val.initialvalue == undefined)
                val.initialvalue = "";

            if ($(val).attr("evaluationfunction"))
                  eval("val.evaluationfunction = " + $(val).attr("evaluationfunction") + ";");
            if ($(val).attr("controltovalidate"))
                  val.controltovalidate = $(val).attr("controltovalidate");
            if ($(val).attr("errormessage"))
                  val.errormessage = $(val).attr("errormessage");
            if ($(val).attr("Dynamic"))
                  val.Dynamic = $(val).attr("Dynamic");     
            if ($(val).attr("initialvalue"))
                  val.initialvalue = $(val).attr("initialvalue"); 
                if ($(val).attr("ValidationExpression"))  
                  val.validationexpression =  $(val).attr("ValidationExpression");
         }     
    }
}

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有