我有一系列包含各种文本框控件和DropdownLists的手套班,每个都有自己的验证器。

如果表单提交的一些服务器端验证,是否有可能会自动展开以前最小化的窗格,其中包含无效的验证仪消息?否则,它似乎是用户没有理由即时提交。

另一种情况:假设我有多个窗格,其中与输入相关的客户端验证器。如果窗格最小化(因此您无法看到验证器的errormessage),是否有一种方法可以在提交时发生Ajax页面验证时扩展相应的窗格吗?

我知道这种方法有一个蛮力的方法,我跟踪每个验证器及其关联的手套,但我希望能够为大量输入/验证器和窗格处理我的情况的更好的解决方案。

有帮助吗?

解决方案

如何像这样的东西(使用jQuery,但我确定它可以转换为普通的JavaScript)...

$(document).ready(function(){
    if (isPostback()){
        $.each(Page_Validators, function(index, validator) {
            if (!validator.isvalid) {
            // do something here to locate the accordion based on the validator
            // $(this) is the currently invalid validator element as a jquery object/wrapped set
            // so for example...
                $(this).parent().slideDown();
            // This assumes that the immediate parent of of the validator is the accordion which is unlikely but if you post your emitted html I can write the appropriate selector for you.  
            }
        });
    }
});
.

因为你不希望它在初始加载上射击,你可以使用这样的技术如何在JavaScript中检测/跟踪回发?并检查文件后是否在文档后查看.Ready - 我假设您已经使用了链接中的建议,并且您的回发检测功能称为ispostback()。

其他提示

有一个为此问题建造的项目尝试看看它....您还可以下载源头来分析更多详细信息或使用相同的代码基础,如果需要.... http://www.codeproject.com/articles/43397/verationing-Accordion-and-radpanelbar-udding-ajax-a

富有击败我,但这是香草js版本(IE9 +):

Page_Validators
    .filter(function(v) { return !v.isvalid; })
    .forEach(function (v) { console.log(v.parentNode); });
.

记得将代码放在 -tag下面。我使用了使用jQuerys文档.Ready和Window.Onload,因为它可能在加载ASP.NET的所有所需JavaScript之前执行代码。

更新:更多浏览器兼容版本

for(var i = 0; i < Page_Validators.length; i++) {
    var validator = Page_Validators[i];
    if (!validator.isvalid) {
        console.log(validator.parentNode);
    }
}
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top