具有多个ValidationGroups的Page_ClientValidate() - 如何同时显示多个摘要?

joe*_*not 24 asp.net validation validationsummary

ASP.NET 2.0.假设我有两个验证组valGrpOne和valGrpTwo; 和两个验证摘要valSummOne和valSummTwo; 分解部分的原因纯粹是美学.一个提交按钮,触发两个组的验证.

现在我想触发客户端验证,并希望同时显示BOTH验证摘要;

所以我设置了一个Javascript函数,它被调用btnSubmit,并且在这个函数中我调用Page_ClientValidate("valGrpOne")Page_ClientValidate("valGrpTwo")连续; 问题只是一次显示一个摘要(但我真的希望两者都显示!)

有关如何从客户端代码同时显示两个验证摘要的任何想法?

非常类似于以下问题,它为服务器端提供了答案. 使用单个按钮触发多个验证组?

joe*_*not 31

好的,所以答案并不简单.似乎客户端验证的默认行为是仅显示刚刚验证过的最新组/摘要.但是一些Javascript tweeking给了我一个可接受的答案.

随意提供改进.

   <script type="text/javascript" language="javascript">
    /* Manual client-side validation of Validator Groups */
    function fnJSOnFormSubmit() {
        var isGrpOneValid = Page_ClientValidate("valGrpOne");
        var isGrpTwoValid = Page_ClientValidate("valGrpTwo");

        var i;
        for (i = 0; i < Page_Validators.length; i++) { 
            ValidatorValidate(Page_Validators[i]); //this forces validation in all groups
        }

        //display all summaries.
        for (i = 0; i < Page_ValidationSummaries.length; i++) {
            summary = Page_ValidationSummaries[i];
            //does this summary need to be displayed?
            if (fnJSDisplaySummary(summary.validationGroup)) {
                summary.style.display = ""; //"none"; "inline";
            }
        }

        if (isGrpOneValid && isGrpTwoValid)
            return true; //postback only when BOTH validations pass.
        else
            return false;
    }


    /* determines if a Validation Summary for a given group needs to display */
    function fnJSDisplaySummary(valGrp) {
        var rtnVal = false; 
        for (i = 0; i < Page_Validators.length; i++) {
            if (Page_Validators[i].validationGroup == valGrp) { 
                if (!Page_Validators[i].isvalid) { //at least one is not valid.
                    rtnVal = true;
                    break; //exit for-loop, we are done.
                }
            }
        }
        return rtnVal;
    }
</script>
Run Code Online (Sandbox Code Playgroud)


小智 5

这是用于针对多个组进行验证的另一种简单且通用的方法。

// Page_ClientValidate only shows errors from the last validation group.  
// This method allows showing for multiple groups
function Page_ClientValidateMultiple(groups) {
    var invalidIdxs = [];
    var result = true;

    // run validation from each group and remember failures
    for (var g = 0; g < groups.length; g++) {
        result = Page_ClientValidate(groups[g]) && result;
        for (var v = 0; v < Page_Validators.length; v++)
            if (!Page_Validators[v].isvalid)
                invalidIdxs.push(v);
    }

    // re-show any failures
    for (var i = 0; i < invalidIdxs.length; i++) {
        ValidatorValidate(Page_Validators[invalidIdxs[i]]);
    }

    // return false if any of the groups failed
    return result;
};
Run Code Online (Sandbox Code Playgroud)