private static IEnumerable <ModelState> GetFaultedModelStates(ModelStateDictionary modelState, string[] groupNames, object model) { var props = GetPropertyMap(string.Empty, model, new List <object>()); IEnumerable <string> validatedPropertyNames = props .Where(pdm => pdm.Property.Attributes.OfType <ValidationGroupAttribute>() .Where(vg => groupNames.Intersect(vg.GroupNames, StringComparer.OrdinalIgnoreCase).Any()).Any() ).Select(pd => pd.Key).ToArray(); IEnumerable <ModelState> faulted = modelState.Where(ms => validatedPropertyNames.Contains(ms.Key) && !modelState.IsValidField(ms.Key)).Select(ms => ms.Value).ToArray(); return(faulted); }
public static string[] GetErrors(this ModelStateDictionary modelState, string prefix) { if (!modelState.IsValid) { List <string> errors = new List <string>(); IEnumerable <KeyValuePair <string, ModelState> > states = prefix.IsNullOrEmpty() ? modelState.AsEnumerable() : modelState.Where(x => x.Key.StartsWith(prefix + ".")); foreach (var modelStateKvp in states) { foreach (var modelError in modelStateKvp.Value.Errors) { errors.Add(modelError.ErrorMessage); } } return(errors.ToArray()); } return(null); }
public static Dictionary <string, string[]> ToErrorList(this ModelStateDictionary modelState) { var func = new Func <ModelError, string>(state => { var str = string.Empty; if (!string.IsNullOrEmpty(state.ErrorMessage)) { str += state.ErrorMessage; } if (state.Exception != null) { str += (!string.IsNullOrEmpty(str) ? " " : "") + state.Exception.Message; } return(str); }); var d = modelState .Where(kvp => kvp.Value.Errors.Count > 0) .ToDictionary(kvp => String.IsNullOrWhiteSpace(kvp.Key) ? String.Empty : kvp.Key, kvp => kvp.Value.Errors.Select(e => func(e)).ToArray()); return(d); }
/// <summary> /// Removes all the elements except those with keys matching keys in the <paramref name="includes"/> list. /// </summary> /// <param name="modelState"></param> /// <param name="includes"></param> public static void RemoveAllBut(this ModelStateDictionary modelState, params string[] includes) { modelState.Where(x => !includes.Any(i => String.Compare(i, x.Key, true) == 0)).ToList().ForEach(k => modelState.Remove(k)); }