예제 #1
0
        /// <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());
        }
예제 #2
0
        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;
                }
            }
        }
예제 #3
0
    /// <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);
            }
        }
    }
예제 #4
0
        /// <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 }));
                }
            }
        }
예제 #5
0
 /// <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));
 }