public FieldValidationMetadata GetValidationMetadataForField( string fieldName, bool createIfNotFound ) { if (String.IsNullOrEmpty(fieldName)) { throw Error.ParameterCannotBeNullOrEmpty("fieldName"); } FieldValidationMetadata metadata; if (!FieldValidators.TryGetValue(fieldName, out metadata)) { if (createIfNotFound) { metadata = new FieldValidationMetadata() { FieldName = fieldName }; FieldValidators[fieldName] = metadata; } } return(metadata); }
public void GetValidationMetadataForField_NoCreate_ReturnsMetadataIfFound() { // Arrange FormContext context = new FormContext(); FieldValidationMetadata metadata = new FieldValidationMetadata(); context.FieldValidators["fieldName"] = metadata; // Act FieldValidationMetadata result = context.GetValidationMetadataForField("fieldName"); // Assert Assert.IsNotNull(result); Assert.AreEqual(metadata, result); }
private static FieldValidationMetadata ApplyFieldValidationMetadata(HtmlHelper htmlHelper, ModelMetadata modelMetadata, string modelName) { FieldValidationMetadata validationMetadataForField = htmlHelper.ViewContext.FormContext.GetValidationMetadataForField(modelName, true); foreach (IEnumerable <ModelClientValidationRule> rules in (from v in modelMetadata.GetValidators(htmlHelper.ViewContext.Controller.ControllerContext) select v.GetClientValidationRules())) { foreach (var rule in rules) { validationMetadataForField.ValidationRules.Add(rule); } } return(validationMetadataForField); }
public FieldValidationMetadata GetValidationMetadataForField(string fieldName, bool createIfNotFound) { if (String.IsNullOrEmpty(fieldName)) { throw Error.ParameterCannotBeNullOrEmpty("fieldName"); } FieldValidationMetadata metadata; if (!FieldValidators.TryGetValue(fieldName, out metadata)) { if (createIfNotFound) { metadata = new FieldValidationMetadata() { FieldName = fieldName }; FieldValidators[fieldName] = metadata; } } return metadata; }
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.AreEqual(expected, jsonMetadata); }
public static IHtmlString ValidationMessage(this HtmlHelper htmlHelper, ModelMetadata modelMetadata, IDictionary <string, object> htmlAttributes) { htmlAttributes = htmlAttributes ?? new RouteValueDictionary(); var validationMessage = ""; string fullHtmlFieldName = htmlAttributes["name"] == null ? modelMetadata.PropertyName : htmlAttributes["name"].ToString(); if (!string.IsNullOrEmpty(htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix)) { fullHtmlFieldName = htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix + "." + fullHtmlFieldName; } FormContext formContextForClientValidation = htmlHelper.ViewContext.FormContext; //if (htmlHelper.ViewContext.ClientValidationEnabled) //{ // formContextForClientValidation = htmlHelper.ViewContext.FormContext; //} //if (!htmlHelper.ViewData.ModelState.ContainsKey(fullHtmlFieldName) && (formContextForClientValidation == null)) //{ // return null; //} ModelState modelState = htmlHelper.ViewData.ModelState[fullHtmlFieldName]; ModelErrorCollection errors = (modelState == null) ? null : modelState.Errors; ModelError error = ((errors == null) || (errors.Count == 0)) ? null : errors[0]; if ((error == null) && (formContextForClientValidation == null)) { return(null); } TagBuilder builder = new TagBuilder("span"); builder.MergeAttributes <string, object>(htmlAttributes); builder.AddCssClass((error != null) ? HtmlHelper.ValidationMessageCssClassName : HtmlHelper.ValidationMessageValidCssClassName); if (!string.IsNullOrEmpty(validationMessage)) { builder.SetInnerText(validationMessage); } else if (error != null) { builder.SetInnerText(GetUserErrorMessageOrDefault(htmlHelper.ViewContext.HttpContext, error, modelState)); } if (formContextForClientValidation != null) { bool replaceValidationMessageContents = String.IsNullOrEmpty(validationMessage); FieldValidationMetadata fieldMetadata = ApplyFieldValidationMetadata(htmlHelper, modelMetadata, fullHtmlFieldName); // rules will already have been written to the metadata object fieldMetadata.ReplaceValidationMessageContents = replaceValidationMessageContents; // only replace contents if no explicit message was specified if (htmlHelper.ViewContext.UnobtrusiveJavaScriptEnabled) { builder.MergeAttribute("data-valmsg-for", fullHtmlFieldName); builder.MergeAttribute("data-valmsg-replace", replaceValidationMessageContents.ToString().ToLowerInvariant()); } else { // client validation always requires an ID builder.GenerateId(fullHtmlFieldName + "_validationMessage"); fieldMetadata.ValidationMessageId = builder.Attributes["id"]; } } //if (formContext != null) //{ // bool replaceValidationMessageContents = String.IsNullOrEmpty(validationMessage); // FieldValidationMetadata fieldMetadata = ApplyFieldValidationMetadata(htmlHelper, modelMetadata, modelName); // // rules will already have been written to the metadata object // fieldMetadata.ReplaceValidationMessageContents = replaceValidationMessageContents; // only replace contents if no explicit message was specified // if (htmlHelper.ViewContext.UnobtrusiveJavaScriptEnabled) // { // builder.MergeAttribute("data-valmsg-for", modelName); // builder.MergeAttribute("data-valmsg-replace", replaceValidationMessageContents.ToString().ToLowerInvariant()); // } // else // { // // client validation always requires an ID // builder.GenerateId(modelName + "_validationMessage"); // fieldMetadata.ValidationMessageId = builder.Attributes["id"]; // } //} return(new HtmlString(builder.ToString(TagRenderMode.Normal))); }