public void ValidationTypeProperty() {
            // Arrange
            ModelClientValidationRule rule = new ModelClientValidationRule();

            // Act & assert
            MemberHelper.TestStringProperty(rule, "ValidationType", "", false /* testDefaultValue */);
        }
        public void ValidationTypeProperty() {
            // Arrange
            ModelClientValidationRule rule = new ModelClientValidationRule();

            // Act & assert
            MemberHelper.TestStringProperty(rule, "ValidationType", String.Empty);
        }
        public void ValidationParametersProperty() {
            // Arrange
            ModelClientValidationRule rule = new ModelClientValidationRule();

            // Act
            IDictionary<string, object> parameters = rule.ValidationParameters;

            // Assert
            Assert.IsNotNull(parameters);
            Assert.AreEqual(0, parameters.Count);
        }
            public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
            {
                var rule = new ModelClientValidationRule
                {
                    ErrorMessage = GetErrorMessage(metadata.ContainerType, metadata.GetDisplayName()),
                    ValidationType = "later",
                };

                rule.ValidationParameters.Add("other", "*." + _otherDateProperty);

                yield return rule;
            }
        public IEnumerable <ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var rule = new ModelClientValidationRule()
            {
                ErrorMessage   = Resources.InvalidEmail,
                ValidationType = "email"
            };

            rule.ValidationParameters.Add("pattern", Resources.EmailValidatorRegEx);
            return(new List <ModelClientValidationRule>()
            {
                rule
            });
        }
예제 #6
0
        public IEnumerable <ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var rule = new ModelClientValidationRule()
            {
                ErrorMessage   = (this.ErrorMessage ?? "Required"),
                ValidationType = (this.ClientValidationType ?? "requiredifchecked"),
            };

            string depProp = BuildDependentPropertyId(metadata, context as ViewContext);

            rule.ValidationParameters.Add("dependentproperty", depProp);

            yield return(rule);
        }
        public IEnumerable <ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var rule = new ModelClientValidationRule()
            {
                ErrorMessage   = this.FormatErrorMessage(valueToCompare.ToString()),
                ValidationType = "regexbyradiobutton"
            };

            rule.ValidationParameters.Add("radiobuttongroupname", fieldName);
            rule.ValidationParameters.Add("valuetocompare", valueToCompare);
            rule.ValidationParameters.Add("regex", pattern);

            yield return(rule);
        }
예제 #8
0
        /// <summary>
        /// 設定前端的 html attribute, 供 jQuery validation 辨認
        /// </summary>
        /// <param name="metadata"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public IEnumerable <ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var rule = new ModelClientValidationRule
            {
                // 此 2 property 必填
                ErrorMessage = ErrorMessage,
                // ValidationType 必須唯一
                ValidationType = "atleastonerequired"
            };

            rule.ValidationParameters["myparams"] = string.Join(",", _properties);

            yield return(rule);
        }
예제 #9
0
        // For the client side validation:
        public IEnumerable <ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var rule = new ModelClientValidationRule
            {
                ValidationType = "birthdate", // This is the name jQuery adapter will use!
                ErrorMessage   = ErrorMessage // This is the error message the client shows!
            };

            // The parameters the client side validation uses:
            rule.ValidationParameters["minage"] = MinAge;
            rule.ValidationParameters["maxage"] = MaxAge;

            yield return(rule);
        }
예제 #10
0
        public IEnumerable <ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var errorMessage = DependencyResolver.Current.GetService <ILocalizationService>()
                               .GetResource("FieldMaxLength").FormatWith("", Length);

            ModelClientValidationRule mvr = new ModelClientValidationRule
            {
                ErrorMessage   = errorMessage,
                ValidationType = "maxlength"
            };

            mvr.ValidationParameters.Add("maxallowedlength", Length);
            return(new[] { mvr });
        }
예제 #11
0
        public IEnumerable <ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var regra = new ModelClientValidationRule
            {
                ErrorMessage   = _mensagemErro,
                ValidationType = "regraidademinima"
            };

            regra.ValidationParameters.Add("valoridademinima", _idadeMinima);

            return(new List <ModelClientValidationRule> {
                regra
            });
        }
예제 #12
0
        public IEnumerable <ModelClientValidationRule> GetClientValidationRules(
            ModelMetadata metadata, ControllerContext context)
        {
            ModelClientValidationRule rule = new ModelClientValidationRule();

            rule.ValidationType = "alphabetsOnly";
            rule.ErrorMessage   = "Only alphabets allowed";
            //rule.ValidationParameters.Add
            //("param", DateTime.Now.ToString("dd-MM-yyyy"));
            return(new List <ModelClientValidationRule>
            {
                rule
            });
        }
예제 #13
0
        GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var rule = new ModelClientValidationRule
            {
                ErrorMessage   = this.ErrorMessageString,
                ValidationType = "isdateafter"
            };

            rule.ValidationParameters["propertytested"] =
                this.testedPropertyName;
            rule.ValidationParameters["allowequaldates"] =
                this.allowEqualDates;
            yield return(rule);
        }
예제 #14
0
        public void GetClientValidationRulesShouldReturnIClientValidatableGetClientValidationRulesWhenValidatorImplementsIClientValidatable()
        {
            ControllerContext controllerContext = new ControllerContext {
                HttpContext = Substitute.For <HttpContextBase>()
            };


            ModelMetadata             propertyMetaData     = GetModelMetaData(typeof(TestModel));
            LaboModelValidator        laboModelValidator   = new LaboModelValidator(propertyMetaData, controllerContext, new TestModelValidator());
            ModelClientValidationRule clientValidationRule = laboModelValidator.GetClientValidationRules().First();

            Assert.AreEqual("TestModel validation invalid", clientValidationRule.ErrorMessage);
            Assert.AreEqual("testmodel", clientValidationRule.ValidationType);
        }
        // IEnumerable<ModelClientValidationRule> 検証情報のリスト
        public IEnumerable <ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            // 検証ルールを準備
            var rule = new ModelClientValidationRule
            {
                // 検証名
                ValidationType = "string",
                ErrorMessage   = FormatErrorMessage(metadata.GetDisplayName())
            };

            // 検証パラメーター
            rule.ValidationParameters["length"] = length;
            yield return(rule);
        }
예제 #16
0
        public IEnumerable <ModelClientValidationRule> GetClientValidationRules(
            ModelMetadata metadata,
            ControllerContext context)
        {
            var modelClientValidationRule = new ModelClientValidationRule
            {
                ValidationType = "cnpj",
                ErrorMessage   = this.FormatErrorMessage(metadata.DisplayName)
            };

            return(new List <ModelClientValidationRule> {
                modelClientValidationRule
            });
        }
예제 #17
0
        public IEnumerable <ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var rule = new ModelClientValidationRule
            {
                ValidationType = "rangeday",
                ErrorMessage   = FormatErrorMessage(metadata.GetDisplayName())
            };

            //傳至前端的html attribute, will be data-val-rangeday-min="xxx"
            rule.ValidationParameters["min"] = minimumDays;
            rule.ValidationParameters["max"] = maximumDays;

            yield return(rule);
        }
예제 #18
0
        public void ValidationMessageForWithClientValidation_Unobtrusive()
        {
            var originalProviders = ModelValidatorProviders.Providers.ToArray();

            ModelValidatorProviders.Providers.Clear();

            try
            {
                // Arrange
                HtmlHelper <ValidationModel> htmlHelper = MvcHelper.GetHtmlHelper(GetViewDataWithModelErrors());
                FormContext formContext = new FormContext();
                htmlHelper.ViewContext.ClientValidationEnabled      = true;
                htmlHelper.ViewContext.UnobtrusiveJavaScriptEnabled = true;
                htmlHelper.ViewContext.FormContext = formContext;

                ModelClientValidationRule[] expectedValidationRules = new ModelClientValidationRule[]
                {
                    new ModelClientValidationRule()
                    {
                        ValidationType = "ValidationRule1"
                    },
                    new ModelClientValidationRule()
                    {
                        ValidationType = "ValidationRule2"
                    }
                };

                Mock <ModelValidator> mockValidator = new Mock <ModelValidator>(ModelMetadata.FromStringExpression("", htmlHelper.ViewContext.ViewData), htmlHelper.ViewContext);
                mockValidator.Setup(v => v.GetClientValidationRules())
                .Returns(expectedValidationRules);
                Mock <ModelValidatorProvider> mockValidatorProvider = new Mock <ModelValidatorProvider>();
                mockValidatorProvider.Setup(vp => vp.GetValidators(It.IsAny <ModelMetadata>(), It.IsAny <ControllerContext>()))
                .Returns(new[] { mockValidator.Object });
                ModelValidatorProviders.Providers.Add(mockValidatorProvider.Object);

                // Act
                MvcHtmlString html = htmlHelper.ValidationMessageFor(m => m.baz);

                // Assert
                Assert.Equal("<span class=\"field-validation-valid\" data-valmsg-for=\"baz\" data-valmsg-replace=\"true\"></span>", html.ToHtmlString());
            }
            finally
            {
                ModelValidatorProviders.Providers.Clear();
                foreach (var provider in originalProviders)
                {
                    ModelValidatorProviders.Providers.Add(provider);
                }
            }
        }
예제 #19
0
        public IEnumerable <ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var displayName = metadata.GetDisplayName();

            var modelClientValidationRule = new ModelClientValidationRule()
            {
                ValidationType = "requiredif",
                ErrorMessage   = string.Format(this.ErrorMessageString, displayName)
            };

            modelClientValidationRule.ValidationParameters.Add("dependentproperty", this.dependentProperty);
            modelClientValidationRule.ValidationParameters.Add("dependentvalue", this.dependentValue);
            yield return(modelClientValidationRule);
        }
        /// <summary>
        ///     Retrieves a collection of client validation rules (which are next sent to browsers).
        /// </summary>
        /// <returns>
        ///     A collection of client validation rules.
        /// </returns>
        public override IEnumerable <ModelClientValidationRule> GetClientValidationRules()
        {
            var rule = new ModelClientValidationRule
            {
                ErrorMessage   = FormattedErrorMessage,
                ValidationType = ProvideUniqueValidationType("requiredif")
            };

            rule.ValidationParameters.Add("expression", Expression);
            rule.ValidationParameters.Add("fieldsmap", FieldsMap.ToJson());
            rule.ValidationParameters.Add("constsmap", ConstsMap.ToJson());
            rule.ValidationParameters.Add("allowempty", AllowEmpty.ToJson());
            yield return(rule);
        }
예제 #21
0
    // Diretivas para validação do lado do Cliente, implementa com jquery.validate
    public IEnumerable <ModelClientValidationRule> GetClientValidationRules(
        ModelMetadata metadata,
        ControllerContext context)
    {
        var Rule = new ModelClientValidationRule
        {
            ValidationType = "emailbrasil",
            ErrorMessage   = this.FormatErrorMessage(metadata.PropertyName)
        };

        Rule.ValidationParameters["emailrequerido"] = EmailRequerido;

        yield return(Rule);
    }
예제 #22
0
        public IEnumerable <ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var errorMessage = DependencyResolver.Current.GetService <ILocalizationService>()
                               .GetResource(_errorMessageResourceName).FormatWith(metadata.DisplayName);

            ModelClientValidationRule mvr = new ModelClientValidationRule
            {
                ErrorMessage   = errorMessage,
                ValidationType = "allowedextensions"
            };

            mvr.ValidationParameters.Add("extensions", string.Join(",", AllowedExtensions));
            return(new[] { mvr });
        }
예제 #23
0
        static void ValidateUnobtrusiveValidationRule(ModelClientValidationRule rule, IDictionary <string, object> resultsDictionary, string dictionaryKey)
        {
            if (String.IsNullOrWhiteSpace(rule.ValidationType))
            {
                throw new InvalidOperationException(
                          String.Format(
                              CultureInfo.CurrentCulture,
                              WebPageResources.UnobtrusiveJavascript_ValidationTypeCannotBeEmpty,
                              rule.GetType().FullName));
            }

            if (resultsDictionary.ContainsKey(dictionaryKey))
            {
                throw new InvalidOperationException(
                          String.Format(
                              CultureInfo.CurrentCulture,
                              WebPageResources.UnobtrusiveJavascript_ValidationTypeMustBeUnique,
                              rule.ValidationType));
            }

            if (rule.ValidationType.Any(c => !Char.IsLower(c)))
            {
                throw new InvalidOperationException(
                          String.Format(CultureInfo.CurrentCulture, WebPageResources.UnobtrusiveJavascript_ValidationTypeMustBeLegal,
                                        rule.ValidationType,
                                        rule.GetType().FullName));
            }

            foreach (var key in rule.ValidationParameters.Keys)
            {
                if (String.IsNullOrWhiteSpace(key))
                {
                    throw new InvalidOperationException(
                              String.Format(
                                  CultureInfo.CurrentCulture,
                                  WebPageResources.UnobtrusiveJavascript_ValidationParameterCannotBeEmpty,
                                  rule.GetType().FullName));
                }

                if (!Char.IsLower(key.First()) || key.Any(c => !Char.IsLower(c) && !Char.IsDigit(c)))
                {
                    throw new InvalidOperationException(
                              String.Format(
                                  CultureInfo.CurrentCulture,
                                  WebPageResources.UnobtrusiveJavascript_ValidationParameterMustBeLegal,
                                  key,
                                  rule.GetType().FullName));
                }
            }
        }
        public IEnumerable <ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var rule = new ModelClientValidationRule()
            {
                ErrorMessage   = Resources.InvalidInputCharacter,
                ValidationType = "textlineinput"
            };

            rule.ValidationParameters.Add("pattern", Resources.TextLineValidatorRegEx);
            return(new List <ModelClientValidationRule>()
            {
                rule
            });
        }
예제 #25
0
        public IEnumerable <ModelClientValidationRule> GetClientValidationRules(
            ModelMetadata metadata,
            ControllerContext context
            )
        {
            var rule = new ModelClientValidationRule
            {
                ValidationType = "accept",
                ErrorMessage   = FormatErrorMessage(metadata.GetDisplayName())
            };

            rule.ValidationParameters["mimetype"] = MimeTypesNormalized;
            yield return(rule);
        }
예제 #26
0
        public IEnumerable <ModelClientValidationRule> GetClientValidationRules(
            ModelMetadata metadata,
            ControllerContext context)
        {
            var clientValidationRule = new ModelClientValidationRule()
            {
                ErrorMessage   = FormatErrorMessage(metadata.GetDisplayName()),
                ValidationType = "notlessthan"//这里是核心点
            };

            clientValidationRule.ValidationParameters.Add("otherproperty", OtherProperty);

            return(new[] { clientValidationRule });
        }
        IEnumerable <ModelClientValidationRule> IClientValidatable.GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var rule = new ModelClientValidationRule();

            rule.ErrorMessage = FormatErrorMessage(metadata.GetDisplayName());
            rule.ValidationParameters.Add(
                "validationcallback",
                $@"function(options) {{
                    var now = new Date();
                    return options.value && options.value <= now.setFullYear(now.getFullYear() - {Age});
                }}");
            rule.ValidationType = "custom";
            yield return(rule);
        }
예제 #28
0
        public IEnumerable <ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var rule = new ModelClientValidationRule()
            {
                ErrorMessage   = String.IsNullOrEmpty(ErrorMessage) ? FormatErrorMessage(metadata.DisplayName) : ErrorMessage,
                ValidationType = "phoneregex",
            };

            rule.ValidationParameters.Add("regex", Regex);
            rule.ValidationParameters.Add("drerrormessage", ErrorMessage);
            rule.ValidationParameters.Add("isandoperator", IsAndOperator.ToString());
            rule.ValidationParameters.Add("isdrrequired", IsRequired.ToString());
            yield return(rule);
        }
예제 #29
0
        /// <summary>
        /// Get Client Validation Rules
        /// </summary>
        /// <param name="metadata">metadata object</param>
        /// <param name="context">context Object</param>
        /// <returns>Return ModelClientValidationRule List</returns>
        public IEnumerable <ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var validTypes = string.Join(",", this.ValidExtensions.Select(ext => ext.ToString()).ToArray());
            var result     = new ModelClientValidationRule()
            {
                ValidationType = this.GetType().Name.Replace("Attribute", string.Empty).ToLower(),
                ////ErrorMessage = $"File extension for field {metadata.DisplayName ?? metadata.PropertyName} is invalid. Valid file types: {validTypes}"
                ErrorMessage = "File extension for field " + metadata.DisplayName ?? metadata.PropertyName + " is invalid. Valid file types: " + validTypes + " OR the file exceeds the maximum allowed file size."
            };

            result.ValidationParameters.Add("validtypes", validTypes);

            yield return(result);
        }
예제 #30
0
        GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var validationRule = new ModelClientValidationRule
            {
                //ErrorMessage = FormatErrorMessage(metadata.DisplayName),
                ErrorMessage   = this.ErrorMessage,
                ValidationType = "notequal",
            };

            //validationRule.ValidationParameters.Add("value", NotEqualValue);
            //validationRule.ValidationParameters.Add("value", NotEqualValue);
            validationRule.ValidationParameters["other"] = NotEqualValue;
            yield return(validationRule);
        }
        public IEnumerable <ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            ErrorMessage = UmbracoValidationHelper.GetDictionaryItem(_errorMessageDictionaryKey);

            var error = FormatErrorMessage(metadata.DisplayName);
            var rule  = new ModelClientValidationRule();

            rule.ErrorMessage   = error;
            rule.ValidationType = "regex";

            rule.ValidationParameters.Add("pattern", this.Pattern);

            yield return(rule);
        }
예제 #32
0
        /// <summary>
        /// Gets the client validation rules, where the validation message is a localised error message from the Sitecore CMS dictionary given a key.
        /// </summary>
        /// <param name="metadata">Model metadata</param>
        /// <param name="validationType">Validation type "key"</param>
        /// <param name="dictionaryKey">Key in the Sitecore dictionary to retrieve validation error message with.</param>
        /// <returns></returns>
        public static List <ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, string validationType, string dictionaryKey)
        {
            var modelClientValidationRule = new ModelClientValidationRule
            {
                ValidationType = validationType,
                ErrorMessage   = GetErrorMessage(dictionaryKey)
            };

            modelClientValidationRule.ValidationParameters.Add("param", metadata.PropertyName);

            return(new List <ModelClientValidationRule> {
                modelClientValidationRule
            });
        }
        public IEnumerable <ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            //THIS IS FOR SET VALIDATION RULES CLIENT SIDE

            var rule = new ModelClientValidationRule()
            {
                ValidationType = "agerangevalidation",
                ErrorMessage   = FormatErrorMessage(metadata.DisplayName)
            };

            rule.ValidationParameters["minage"] = MinAge;
            rule.ValidationParameters["maxage"] = MaxAge;
            yield return(rule);
        }
예제 #34
0
        /// <summary>
        /// 返回客户端验证规则
        /// </summary>
        public IEnumerable <ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            ModelClientValidationRule rule = new ModelClientValidationRule
            {
                ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()),
                //该值必须为全小写,其值与自定义的客户端脚本中验证方法名相同
                //属性data-val-requirediftrue="ErrorMessage"会添加到对应的HTML标签上
                ValidationType = "requirediftrue"
            };

            //data-val-requirediftrue-dependentproperty="_dependentPropertyName"
            rule.ValidationParameters.Add("dependentproperty", _dependentPropertyName);
            yield return(rule);
        }
        public void Validate_AddsClientValidationMetadata()
        {
            var originalProviders = ModelValidatorProviders.Providers.ToArray();
            ModelValidatorProviders.Providers.Clear();

            try
            {
                // Arrange
                HtmlHelper htmlHelper = MvcHelper.GetHtmlHelper(GetViewDataWithModelErrors());
                FormContext formContext = new FormContext()
                {
                    FormId = "form_id"
                };
                htmlHelper.ViewContext.ClientValidationEnabled = true;
                htmlHelper.ViewContext.FormContext = formContext;

                ModelClientValidationRule[] expectedValidationRules = new ModelClientValidationRule[]
                {
                    new ModelClientValidationRule() { ValidationType = "ValidationRule1" },
                    new ModelClientValidationRule() { ValidationType = "ValidationRule2" }
                };

                Mock<ModelValidator> mockValidator = new Mock<ModelValidator>(ModelMetadata.FromStringExpression("", htmlHelper.ViewContext.ViewData), htmlHelper.ViewContext);
                mockValidator.Setup(v => v.GetClientValidationRules())
                    .Returns(expectedValidationRules);
                Mock<ModelValidatorProvider> mockValidatorProvider = new Mock<ModelValidatorProvider>();
                mockValidatorProvider.Setup(vp => vp.GetValidators(It.IsAny<ModelMetadata>(), It.IsAny<ControllerContext>()))
                    .Returns(new[] { mockValidator.Object });
                ModelValidatorProviders.Providers.Add(mockValidatorProvider.Object);

                // Act
                htmlHelper.Validate("baz");

                // Assert
                Assert.NotNull(formContext.GetValidationMetadataForField("baz"));
                Assert.Equal(expectedValidationRules, formContext.FieldValidators["baz"].ValidationRules.ToArray());
            }
            finally
            {
                ModelValidatorProviders.Providers.Clear();
                foreach (var provider in originalProviders)
                {
                    ModelValidatorProviders.Providers.Add(provider);
                }
            }
        }
        public void GetJsonValidationMetadata_ValidationSummary()
        {
            // Arrange
            FormContext context = new FormContext() { FormId = "theFormId", ValidationSummaryId = "validationSummary" };

            ModelClientValidationRule rule = new ModelClientValidationRule() { ValidationType = "ValidationType1", ErrorMessage = "Error Message" };
            rule.ValidationParameters["theParam"] = new { FirstName = "John", LastName = "Doe", Age = 32 };
            FieldValidationMetadata metadata = new FieldValidationMetadata() { FieldName = "theFieldName", ValidationMessageId = "theFieldName_ValidationMessage" };
            metadata.ValidationRules.Add(rule);
            context.FieldValidators["theFieldName"] = metadata;

            // Act
            string jsonMetadata = context.GetJsonValidationMetadata();

            // Assert
            string expected = @"{""Fields"":[{""FieldName"":""theFieldName"",""ReplaceValidationMessageContents"":false,""ValidationMessageId"":""theFieldName_ValidationMessage"",""ValidationRules"":[{""ErrorMessage"":""Error Message"",""ValidationParameters"":{""theParam"":{""FirstName"":""John"",""LastName"":""Doe"",""Age"":32}},""ValidationType"":""ValidationType1""}]}],""FormId"":""theFormId"",""ReplaceValidationSummary"":false,""ValidationSummaryId"":""validationSummary""}";
            Assert.Equal(expected, jsonMetadata);
        }
예제 #37
0
        public void GetUnobtrusiveValidationAttributesWithTwoClientRules()
        {
            // Arrange
            var formContext = new FormContext();
            var viewContext = new Mock<ViewContext>();
            viewContext.SetupGet(vc => vc.FormContext).Returns(formContext);
            viewContext.SetupGet(vc => vc.ClientValidationEnabled).Returns(true);
            viewContext.SetupGet(vc => vc.UnobtrusiveJavaScriptEnabled).Returns(true);
            var viewDataContainer = MvcHelper.GetViewDataContainer(new ViewDataDictionary());
            var htmlHelper = new HtmlHelper(viewContext.Object, viewDataContainer);
            htmlHelper.ClientValidationRuleFactory = delegate
            {
                ModelClientValidationRule rule1 = new ModelClientValidationRule { ValidationType = "type", ErrorMessage = "error" };
                rule1.ValidationParameters["foo"] = "bar";
                rule1.ValidationParameters["baz"] = "biff";
                ModelClientValidationRule rule2 = new ModelClientValidationRule { ValidationType = "othertype", ErrorMessage = "othererror" };
                rule2.ValidationParameters["true3"] = "false4";
                return new[] { rule1, rule2 };
            };

            // Act
            IDictionary<string, object> result = htmlHelper.GetUnobtrusiveValidationAttributes("foobar");

            // Assert
            Assert.Equal("error", result["data-val-type"]);
            Assert.Equal("bar", result["data-val-type-foo"]);
            Assert.Equal("biff", result["data-val-type-baz"]);
            Assert.Equal("othererror", result["data-val-othertype"]);
            Assert.Equal("false4", result["data-val-othertype-true3"]);
        }
        public void ValidationMessageWithClientValidation_ExplicitMessage_Valid_Unobtrusive()
        {
            var originalProviders = ModelValidatorProviders.Providers.ToArray();
            ModelValidatorProviders.Providers.Clear();

            try
            {
                // Arrange
                HtmlHelper htmlHelper = MvcHelper.GetHtmlHelper(GetViewDataWithModelErrors());
                FormContext formContext = new FormContext();
                htmlHelper.ViewContext.ClientValidationEnabled = true;
                htmlHelper.ViewContext.UnobtrusiveJavaScriptEnabled = true;
                htmlHelper.ViewContext.FormContext = formContext;

                ModelClientValidationRule[] expectedValidationRules = new ModelClientValidationRule[]
                {
                    new ModelClientValidationRule() { ValidationType = "ValidationRule1" },
                    new ModelClientValidationRule() { ValidationType = "ValidationRule2" }
                };

                Mock<ModelValidator> mockValidator = new Mock<ModelValidator>(ModelMetadata.FromStringExpression("", htmlHelper.ViewContext.ViewData), htmlHelper.ViewContext);
                mockValidator.Setup(v => v.GetClientValidationRules())
                    .Returns(expectedValidationRules);
                Mock<ModelValidatorProvider> mockValidatorProvider = new Mock<ModelValidatorProvider>();
                mockValidatorProvider.Setup(vp => vp.GetValidators(It.IsAny<ModelMetadata>(), It.IsAny<ControllerContext>()))
                    .Returns(new[] { mockValidator.Object });
                ModelValidatorProviders.Providers.Add(mockValidatorProvider.Object);

                // Act
                MvcHtmlString html = htmlHelper.ValidationMessage("baz", "some explicit message"); // 'baz' is valid

                // Assert
                Assert.Equal("<span class=\"field-validation-valid\" data-valmsg-for=\"baz\" data-valmsg-replace=\"false\">some explicit message</span>", html.ToHtmlString());
            }
            finally
            {
                ModelValidatorProviders.Providers.Clear();
                foreach (var provider in originalProviders)
                {
                    ModelValidatorProviders.Providers.Add(provider);
                }
            }
        }
        public void ValidationMessageWithClientValidation_DefaultMessage_Valid()
        {
            var originalProviders = ModelValidatorProviders.Providers.ToArray();
            ModelValidatorProviders.Providers.Clear();

            try
            {
                // Arrange
                HtmlHelper htmlHelper = MvcHelper.GetHtmlHelper(GetViewDataWithModelErrors());
                FormContext formContext = new FormContext();
                htmlHelper.ViewContext.ClientValidationEnabled = true;
                htmlHelper.ViewContext.FormContext = formContext;

                ModelClientValidationRule[] expectedValidationRules = new ModelClientValidationRule[]
                {
                    new ModelClientValidationRule() { ValidationType = "ValidationRule1" },
                    new ModelClientValidationRule() { ValidationType = "ValidationRule2" }
                };

                Mock<ModelValidator> mockValidator = new Mock<ModelValidator>(ModelMetadata.FromStringExpression("", htmlHelper.ViewContext.ViewData), htmlHelper.ViewContext);
                mockValidator.Setup(v => v.GetClientValidationRules())
                    .Returns(expectedValidationRules);
                Mock<ModelValidatorProvider> mockValidatorProvider = new Mock<ModelValidatorProvider>();
                mockValidatorProvider.Setup(vp => vp.GetValidators(It.IsAny<ModelMetadata>(), It.IsAny<ControllerContext>()))
                    .Returns(new[] { mockValidator.Object });
                ModelValidatorProviders.Providers.Add(mockValidatorProvider.Object);

                // Act
                MvcHtmlString html = htmlHelper.ValidationMessage("baz"); // 'baz' is valid

                // Assert
                Assert.Equal("<span class=\"field-validation-valid\" id=\"baz_validationMessage\"></span>", html.ToHtmlString());
                Assert.NotNull(formContext.GetValidationMetadataForField("baz"));
                Assert.Equal("baz_validationMessage", formContext.FieldValidators["baz"].ValidationMessageId);
                Assert.True(formContext.FieldValidators["baz"].ReplaceValidationMessageContents);
                Assert.Equal(expectedValidationRules, formContext.FieldValidators["baz"].ValidationRules.ToArray());
            }
            finally
            {
                ModelValidatorProviders.Providers.Clear();
                foreach (var provider in originalProviders)
                {
                    ModelValidatorProviders.Providers.Add(provider);
                }
            }
        }
        public void ValidationMessageForWithClientValidation_Unobtrusive() {
            var originalProviders = ModelValidatorProviders.Providers.ToArray();
            ModelValidatorProviders.Providers.Clear();

            try {
                // Arrange
                HtmlHelper<ValidationModel> htmlHelper = MvcHelper.GetHtmlHelper(GetViewDataWithModelErrors());
                FormContext formContext = new FormContext();
                htmlHelper.ViewContext.ClientValidationEnabled = true;
                htmlHelper.ViewContext.UnobtrusiveJavaScriptEnabled = true;
                htmlHelper.ViewContext.FormContext = formContext;

                ModelClientValidationRule[] expectedValidationRules = new ModelClientValidationRule[] {
                    new ModelClientValidationRule() { ValidationType = "ValidationRule1" },
                    new ModelClientValidationRule() { ValidationType = "ValidationRule2" }
                };

                Mock<ModelValidator> mockValidator = new Mock<ModelValidator>(ModelMetadata.FromStringExpression("", htmlHelper.ViewContext.ViewData), htmlHelper.ViewContext);
                mockValidator.Setup(v => v.GetClientValidationRules())
                             .Returns(expectedValidationRules);
                Mock<ModelValidatorProvider> mockValidatorProvider = new Mock<ModelValidatorProvider>();
                mockValidatorProvider.Setup(vp => vp.GetValidators(It.IsAny<ModelMetadata>(), It.IsAny<ControllerContext>()))
                                     .Returns(new[] { mockValidator.Object });
                ModelValidatorProviders.Providers.Add(mockValidatorProvider.Object);

                // Act
                MvcHtmlString html = htmlHelper.ValidationMessageFor(m => m.baz);

                // Assert
                Assert.AreEqual(@"<span class=""field-validation-valid"" data-valmsg-for=""baz"" data-valmsg-replace=""true""></span>", html.ToHtmlString(),
                    "ValidationMessageFor() should always return something if client validation is enabled.");
            }
            finally {
                ModelValidatorProviders.Providers.Clear();
                foreach (var provider in originalProviders) {
                    ModelValidatorProviders.Providers.Add(provider);
                }
            }
        }
예제 #41
0
        public void GetUnobtrusiveValidationAttributesGuardClauses()
        {
            // Arrange
            var formContext = new FormContext();
            var viewContext = new Mock<ViewContext>();
            viewContext.SetupGet(vc => vc.FormContext).Returns(formContext);
            viewContext.SetupGet(vc => vc.ClientValidationEnabled).Returns(true);
            viewContext.SetupGet(vc => vc.UnobtrusiveJavaScriptEnabled).Returns(true);
            var viewDataContainer = MvcHelper.GetViewDataContainer(new ViewDataDictionary());
            var htmlHelper = new HtmlHelper(viewContext.Object, viewDataContainer);

            // Act & Assert
            AssertBadClientValidationRule(htmlHelper, "Validation type names in unobtrusive client validation rules cannot be empty. Client rule type: System.Web.Mvc.ModelClientValidationRule", new ModelClientValidationRule());
            AssertBadClientValidationRule(htmlHelper, "Validation type names in unobtrusive client validation rules must consist of only lowercase letters. Invalid name: \"OnlyLowerCase\", client rule type: System.Web.Mvc.ModelClientValidationRule", new ModelClientValidationRule { ValidationType = "OnlyLowerCase" });
            AssertBadClientValidationRule(htmlHelper, "Validation type names in unobtrusive client validation rules must consist of only lowercase letters. Invalid name: \"nonumb3rs\", client rule type: System.Web.Mvc.ModelClientValidationRule", new ModelClientValidationRule { ValidationType = "nonumb3rs" });
            AssertBadClientValidationRule(htmlHelper, "Validation type names in unobtrusive client validation rules must be unique. The following validation type was seen more than once: rule", new ModelClientValidationRule { ValidationType = "rule" }, new ModelClientValidationRule { ValidationType = "rule" });

            var emptyParamName = new ModelClientValidationRule { ValidationType = "type" };
            emptyParamName.ValidationParameters[""] = "foo";
            AssertBadClientValidationRule(htmlHelper, "Validation parameter names in unobtrusive client validation rules cannot be empty. Client rule type: System.Web.Mvc.ModelClientValidationRule", emptyParamName);

            var paramNameMixedCase = new ModelClientValidationRule { ValidationType = "type" };
            paramNameMixedCase.ValidationParameters["MixedCase"] = "foo";
            AssertBadClientValidationRule(htmlHelper, "Validation parameter names in unobtrusive client validation rules must start with a lowercase letter and consist of only lowercase letters or digits. Validation parameter name: MixedCase, client rule type: System.Web.Mvc.ModelClientValidationRule", paramNameMixedCase);

            var paramNameStartsWithNumber = new ModelClientValidationRule { ValidationType = "type" };
            paramNameStartsWithNumber.ValidationParameters["2112"] = "foo";
            AssertBadClientValidationRule(htmlHelper, "Validation parameter names in unobtrusive client validation rules must start with a lowercase letter and consist of only lowercase letters or digits. Validation parameter name: 2112, client rule type: System.Web.Mvc.ModelClientValidationRule", paramNameStartsWithNumber);
        }
        public void ValidationMessageWithClientValidation() {
            var originalProvider = ModelValidatorProviders.Current;

            try {
                // Arrange
                HtmlHelper htmlHelper = HtmlHelperTest.GetHtmlHelper(GetViewDataWithModelErrors());
                FormContext formContext = new FormContext() {
                    ClientValidationEnabled = true,
                    FormId = "form_id"
                };
                htmlHelper.ViewContext.FormContext = formContext;

                ModelClientValidationRule[] expectedValidationRules = new ModelClientValidationRule[] {
                    new ModelClientValidationRule() { ValidationType = "ValidationRule1" },
                    new ModelClientValidationRule() { ValidationType = "ValidationRule2" }
                };

                Mock<ModelValidator> mockValidator = new Mock<ModelValidator>(ModelMetadata.FromStringExpression("", htmlHelper.ViewContext.ViewData), htmlHelper.ViewContext);
                mockValidator.Expect(v => v.GetClientValidationRules())
                             .Returns(expectedValidationRules);
                Mock<ModelValidatorProvider> mockValidatorProvider = new Mock<ModelValidatorProvider>();
                mockValidatorProvider.Expect(vp => vp.GetValidators(It.IsAny<ModelMetadata>(), It.IsAny<ControllerContext>()))
                                     .Returns(new[] { mockValidator.Object });
                ModelValidatorProviders.Current = mockValidatorProvider.Object;

                // Act
                MvcHtmlString html = htmlHelper.ValidationMessage("baz");

                // Assert
                Assert.AreEqual(@"<span class=""field-validation-error"" id=""form_id_baz_validator""></span>", html.ToHtmlString(),
                    "ValidationMessage() should always return something if client validation is enabled.");
                Assert.IsNotNull(formContext.GetValidationMetadataForField("baz"));
                Assert.AreEqual("form_id_baz_validator", formContext.FieldValidators["baz"].ValidatorId);
                CollectionAssert.AreEqual(expectedValidationRules, formContext.FieldValidators["baz"].ValidationRules.ToArray());
            }
            finally {
                ModelValidatorProviders.Current = originalProvider;
            }
        }