1

我使用 .net 4.5 使用 Visual Studio 2012 创建了一个新的 Web 应用程序项目。除了开箱即用的内容之外,我没有更改任何默认值或添加任何内容。

我已经阅读了整个网络,其中包括不显眼的验证,但是除了在脚本文件夹 webuivalidation 中我猜是它之外,可以找到任何对它的引用,尽管通过 nuget 有很多其他的。如果我去注册寻呼机并单击未填写任何内容的按钮,我会收到默认的错误消息,所以我再次猜测它的工作原理。链接到有关 4.5 脚本管理器的详细信息,我已阅读http://blogs.msdn.com/b/webdev/archive/2012/09/21/asp-net-4-5-scriptmanager-improvements-in-webforms.aspx

我想要做的是将css从默认更改为引导程序,如下面的链接所示:

MVC Twitter Bootstrap 不显眼的错误处理

http://www.braindonor.net/blog/integrating-bootstrap-error-styling-with-mvcs-unobtrusive-error-validation/381/

但是使用任何一种方法或任何方法都会出错,因为我无法获取未定义的 jQuery.validator 对象。此外,如果尝试 $(this).valid() 给出不支持的错误。所以请有人可以帮助并向我解释一下,因为它似乎验证位不存在?我已经尝试了几个小时,但没有成功或真正理解问题。

谢谢乔恩

***** 代码位 ***

我从上面的链接中尝试过的 2 位代码,不是我写的(我尝试过编辑但仍然无法让它工作):

 $('form').submit(function () {
    if ($(this).IsValid()) {
        $(this).find('div.control-group').each(function () {
            if ($(this).find('span.field-validation-error').length == 0) {
                $(this).removeClass('error');
            }
        });
    }
    else {
        $(this).find('div.control-group').each(function () {
            if ($(this).find('span.field-validation-error').length > 0) {
                $(this).addClass('error');
            }
        });
    }
});
$('form').each(function () {
    $(this).find('div.control-group').each(function () {
        if ($(this).find('span.field-validation-error').length > 0) {
            $(this).addClass('error');
        }
    });
});   

还:

jQuery.Page_Validators.setDefaults({
    highlight: function (element, errorClass, validClass) {
        if (element.type === 'radio') {
            this.findByName(element.name).addClass(errorClass).removeClass(validClass);
        } else {
            $(element).addClass(errorClass).removeClass(validClass);
            $(element).closest('.control-group').removeClass('success').addClass('error');
        }
    },
    unhighlight: function (element, errorClass, validClass) {
        if (element.type === 'radio') {
            this.findByName(element.name).removeClass(errorClass).addClass(validClass);
        } else {
            $(element).removeClass(errorClass).addClass(validClass);
            $(element).closest('.control-group').removeClass('error').addClass('success');
        }
    }
});

$(document).ready(function () {
    $('span.field-validation-valid, span.field-validation-error').each(function () {
        $(this).addClass('help-inline');
    })
});       
4

1 回答 1

1

我已经通过覆盖 ValidatorUpdateDisplay 设法让它在网络表单中工作。Webforms 不使用 jquery 不显眼的验证或验证它使用 WebUIValidation.js。我花了一整天的时间在这让我发疯。最后,我认为最好覆盖现有功能。编码基于:http ://blog.benmcevoy.com.au/classing-invalid-elements-with-webforms-validation

请参阅下面的代码。我希望这对其他人有帮助。如果您可以使代码更好,请随时发表评论。

 (function ($) {
            if (window.ValidatorUpdateDisplay) {
                var proxied = window.ValidatorUpdateDisplay;

                window.ValidatorUpdateDisplay = function ()
                {
                    onBefore(arguments);

                    var result = proxied.apply(this, arguments);

                    onAfter(arguments);

                    return result;
                };

                var onBefore = function (arguments) {

                };

                var onAfter = function (arguments)
                {
                    var control = document.getElementById(arguments[0].controltovalidate);
                    var validators = control.Validators;
                    var isValid = true;

                    for (var i = 0; i < validators.length; i++) {
                        if (!validators[i].isvalid) {
                            isValid = false;
                            break;
                        }
                    }

                    if (isValid) {                                                       
                        var group = $(control).closest('div.control-group');
                        if (group.find('span.field-validation-error').length > 0) {
                            group.removeClass('error');
                            group.addClass('success');
                        }

                    } else {                            
                        var group = $(control).closest('div.control-group');
                        if (group.find('span.field-validation-error').length > 0) {
                            group.removeClass('success');
                            group.addClass('error');
                        }
                    }
                };
            }
        })(jQuery);
于 2013-05-22T20:39:55.553 回答