【问题标题】:Dynamically change ajax toolkit ValidatorCalloutExtender动态改变ajax工具包ValidatorCalloutExtender
【发布时间】:2009-06-29 18:05:27
【问题描述】:

我正在使用 ajax 工具包的 ValidatorCalloutExtender 在文本框上显示错误消息。 ValidatorCalloutExtender 在验证文本框的 RegularExpressionValidator 上进行扩展。我遇到的问题是我需要根据已选择与文本框关联的下拉列表项来动态更改 ValidationExpression 和 ErrorMessage。我能够使用客户端事件和 javascript 成功地做到这一点,但我似乎无法让 ValidatorCalloutExtender 更新正确显示的 ErrorMessage。更让我困惑的是这在 Firefox 中运行良好,但我似乎无法让它在任何版本的 IE 中运行。如果有人可以帮助我找到一种方法来获取显示为动态更改的错误消息,我们将不胜感激。

【问题讨论】:

    标签: asp.net ajax validation asp.net-ajax toolkit


    【解决方案1】:

    大家好,

    我发现了自己的问题,并认为如果其他人尝试做与我类似的事情,我可能会将我的发现放在这里。

    在 javascript 中,我将绑定到文本框的正则表达式验证器的对象传递给一个函数,该函数将根据下拉列表中的值更改正则表达式和错误消息。如果用户更改了下拉列表值,我希望验证器和 ajax 验证器调用立即更新,并且要么告诉用户文本框中的值现在有效,要么由于这个新原因而无效。我并不是说这是最好的方法,但这是适合我的方法,我想在客户端上这样做。

    下面是我正在使用的代码,(val) 是传入的正则表达式验证器对象。

    function setSearchRegEx(val)
    {
        var regExpression = "";
        var valMessage = "Must be in the following format: ";
        var message = "";
    
        // set regex information depending on what drop down value they select.
        switch (document.getElementByID('ddlValue1.ClientID').value) {
            case "Value1":
                regExpression = "^[a-zA-Z0-9'*\s-]{1,75}$";
                message = valMessage + "[A-Z][0-9]'. #-";
                break;
            case "Value2":
                regExpression = "^\[0-9]{3}-\[0-9]{2}-\[0-9]{4}|\d{9}$";
                message = valMessage + "999-99-9999";
                break;
            case "Value3":
                regExpression = "[a-zA-Z0-9'*\s-]{1,50}$";
                message = valMessage + "[A-Z][0-9]'. #-";
                break;
            case "Valu4":
                regExpression = "^\[0-9]{3}-\[0-9]{3}-\[0-9]{4}$";
                message = valMessage + "999-999-9999";
                break;
            case "Value5":
                regExpression = "^[0-9]{1,10}$";
                message = valMessage + "9999999999";
                break;
            default:
                regExpression = "";
                message = "";
        }
        // set validation control values for the new drop down selected.
        val.validationexpression = regExpression;
        val.errormessage = message;
        val.title = message;
    
        // fire the validation function to validate what is currently in the textbox
        val.isvalid = val.evaluationfunction(val);
        //call the function to manipulate the UI
        validatorUpdateDisplay(val);
    }
    
    function validatorUpdateDisplay(val)
    {
        if (val.isvalid) {
    
            //make the error invisible
            val.display = "none";
        }
        else {
    
            var browser = navigator.appName;
    
            //different browsers get updated differently, IE really the only main one to update differently.
            if (browser == "Microsoft Internet Explorer") {
                val.ValidatorCalloutBehavior._errorMessageCell.innerText = val.errormessage;
            }
            else {
                val.ValidatorCalloutBehavior._errorMessageCell.textContent = val.errormessage;
            }
    
            //make the error visible
            val.display = "inline";
        }          
    }
    

    正如您所见,Internet Explorer 的工作方式与我测试过的其他浏览器不同!如果有人有更好的方法请分享,我希望这个答案可以帮助一些人!

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多