/// <summary> /// Retrieve all ErrorMessages concatenated in one string. /// </summary> /// <param name="modelState">Current ModelState instance</param> /// <param name="parameterName">parameter name of the model in action method.</param> /// <returns>Concatenated error message.</returns> public static string ToStringAllErrors(this ModelStateDictionary modelState, string parameterName = null) { StringBuilder sb = new StringBuilder(); if (string.IsNullOrWhiteSpace(parameterName)) { foreach (var item in modelState.Where(x => x.Value.ValidationState == ModelValidationState.Invalid)) { foreach (var item2 in item.Value.Errors) { sb.AppendLine(item2.ErrorMessage ?? item2.Exception.Message); } } } else { foreach (var item in modelState.FindKeysWithPrefix(parameterName)) { foreach (var item2 in item.Value.Errors) { sb.AppendLine(item2.ErrorMessage ?? item2.Exception.Message); } } } return(sb.ToString()); }
private static void ResetValidationState(ModelStateDictionary modelState, string key) { var entries = modelState.FindKeysWithPrefix(key); foreach (var item in entries) { if (item.Value.ValidationState == ModelValidationState.Unvalidated) { item.Value.ValidationState = ModelValidationState.Valid; } } }
/// <summary> /// Removes all the entries for the specified <paramref name="expression"/> from the /// <see cref="ModelStateDictionary"/>. /// </summary> /// <typeparam name="TModel">The type of the model.</typeparam> /// <param name="modelState">The <see cref="ModelStateDictionary"/> instance this method extends.</param> /// <param name="expression">An expression to be evaluated against an item in the current model.</param> public static void RemoveAll <TModel>( this ModelStateDictionary modelState, Expression <Func <TModel, object> > expression) { if (modelState == null) { throw new ArgumentNullException(nameof(modelState)); } if (expression == null) { throw new ArgumentNullException(nameof(expression)); } string modelKey = GetExpressionText(expression); if (string.IsNullOrEmpty(modelKey)) { var modelMetadata = new EmptyModelMetadataProvider().GetMetadataForType(typeof(TModel)); for (var i = 0; i < modelMetadata.Properties.Count; i++) { var property = modelMetadata.Properties[i]; var childKey = property.BinderModelName ?? property.PropertyName; var entries = modelState.FindKeysWithPrefix(childKey).ToArray(); foreach (var entry in entries) { modelState.Remove(entry.Key); } } } else { var entries = modelState.FindKeysWithPrefix(modelKey).ToArray(); foreach (var entry in entries) { modelState.Remove(entry.Key); } } }
/// <summary> /// Retrieve All Error Message within ModelState as ValidationResult /// </summary> /// <param name="modelState">Current ModelState instance</param> /// <param name="parameterName">parameter name of the model in action method.</param> /// <returns>IEnumerable of ValidationResult</returns> public static IEnumerable <ValidationResult> ToValidationResult(this ModelStateDictionary modelState, string parameterName = null) { IEnumerable <KeyValuePair <string, ModelStateEntry> > collection = string.IsNullOrWhiteSpace(parameterName) ? modelState.Where(x => x.Value.ValidationState == ModelValidationState.Invalid) : modelState.FindKeysWithPrefix(parameterName); foreach (var item in collection) { foreach (var error in item.Value.Errors) { yield return(new ValidationResult(error.ErrorMessage ?? error.Exception.Message, new string[] { item.Key })); } } }
/// <summary> /// Determine if current modelState is valid for specific model /// </summary> /// <param name="modelState">Current ModelState instance</param> /// <param name="parameterName">parameter name of the model in action method.</param> /// <returns></returns> public static bool IsValid(this ModelStateDictionary modelState, string parameterName) { return(!modelState.FindKeysWithPrefix(parameterName).Any(x => x.Value.ValidationState == ModelValidationState.Invalid)); }