private static MvcHtmlString ValidationMessageHelper(this HtmlHelper htmlHelper, ModelMetadata modelMetadata, string expression, string validationMessage, IDictionary <string, object> htmlAttributes) { //string modelName = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(expression); string modelName = expression; //FormContext formContext = htmlHelper.ViewContext.GetFormContextForClientValidation(); FormContext formContext = null; if (!htmlHelper.ViewData.ModelState.ContainsKey(modelName) && formContext == null) { return(null); } ModelState modelState = htmlHelper.ViewData.ModelState[modelName]; ModelErrorCollection modelErrors = (modelState == null) ? null : modelState.Errors; ModelError modelError = (((modelErrors == null) || (modelErrors.Count == 0)) ? null : modelErrors.FirstOrDefault(m => !String.IsNullOrEmpty(m.ErrorMessage)) ?? modelErrors[0]); if (modelError == null && formContext == null) { return(null); } TagBuilder builder = new TagBuilder("span"); builder.MergeAttributes(htmlAttributes); builder.AddCssClass((modelError != null) ? HtmlHelper.ValidationMessageCssClassName : HtmlHelper.ValidationMessageValidCssClassName); if (!String.IsNullOrEmpty(validationMessage)) { builder.SetInnerText(validationMessage); } else if (modelError != null) { builder.SetInnerText(GetUserErrorMessageOrDefault(htmlHelper.ViewContext.HttpContext, modelError, modelState)); } if (formContext != null) { bool replaceValidationMessageContents = String.IsNullOrEmpty(validationMessage); if (htmlHelper.ViewContext.UnobtrusiveJavaScriptEnabled) { builder.MergeAttribute("data-valmsg-for", modelName); builder.MergeAttribute("data-valmsg-replace", replaceValidationMessageContents.ToString().ToLowerInvariant()); } else { 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 // client validation always requires an ID builder.GenerateId(modelName + "_validationMessage"); fieldMetadata.ValidationMessageId = builder.Attributes["id"]; } } return(builder.ToMvcHtmlString(TagRenderMode.Normal)); }
private static FieldValidationMetadata ApplyFieldValidationMetadata(HtmlHelper htmlHelper, ModelMetadata modelMetadata, string modelName) { FormContext formContext = htmlHelper.ViewContext.FormContext; FieldValidationMetadata fieldMetadata = formContext.GetValidationMetadataForField(modelName, true /* createIfNotFound */); // write rules to context object //IEnumerable<ModelValidator> validators = ModelValidatorProviders.Providers.GetValidators(modelMetadata, htmlHelper.ViewContext); //foreach (ModelClientValidationRule rule in validators.SelectMany(v => v.GetClientValidationRules())) //{ // fieldMetadata.ValidationRules.Add(rule); //} return(fieldMetadata); }
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 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); }