using System; using System.Linq; using System.Linq.Expressions; using System.Web.Mvc; namespace LeafWeb.WebCms.Utility { public static class Validation { /// /// Checks the ModelState for an error, and returns the given error string if there is one, or null if there is no error /// Used to set class="error" on elements to present the error to the user /// /// /// /// public static MvcHtmlString ValidationErrorFor(this HtmlHelper htmlHelper, Expression> expression, string error) { return HasError(htmlHelper, ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData),ExpressionHelper.GetExpressionText(expression)) ? new MvcHtmlString(error) : null; } public static bool HasError(this HtmlHelper htmlHelper, ModelMetadata modelMetadata, string expression) { var modelName = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(expression); var formContext = htmlHelper.ViewContext.FormContext; if (formContext == null) return false; if (!htmlHelper.ViewData.ModelState.ContainsKey(modelName)) return false; var modelState = htmlHelper.ViewData.ModelState[modelName]; var modelErrors = modelState?.Errors; return modelErrors?.Count > 0; } public static bool HasError(this HtmlHelper htmlHelper) { var viewDataModelState = htmlHelper.ViewData.ModelState; return viewDataModelState.ContainsKey(htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix) && viewDataModelState[htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix].Errors.Any(); } } }