| Line | |
|---|
| 1 | using System;
|
|---|
| 2 | using System.Collections.Generic;
|
|---|
| 3 | using System.ComponentModel;
|
|---|
| 4 | using System.ComponentModel.DataAnnotations;
|
|---|
| 5 | using System.Linq;
|
|---|
| 6 | using System.Text;
|
|---|
| 7 | using xVal.ServerSide;
|
|---|
| 8 |
|
|---|
| 9 | namespace Wierszowki.Services
|
|---|
| 10 | {
|
|---|
| 11 | internal static class DataAnnotationsValidationRunner
|
|---|
| 12 | {
|
|---|
| 13 | public static IEnumerable<ErrorInfo> GetErrors(object instance)
|
|---|
| 14 | {
|
|---|
| 15 | List<ErrorInfo> errors = new List<ErrorInfo>();
|
|---|
| 16 |
|
|---|
| 17 | IEnumerable<PropertyDescriptor> properties = TypeDescriptor.GetProperties(instance).Cast<PropertyDescriptor>();
|
|---|
| 18 | foreach (PropertyDescriptor prop in properties) {
|
|---|
| 19 | IEnumerable<ValidationAttribute> attributes = prop.Attributes.OfType<ValidationAttribute>();
|
|---|
| 20 |
|
|---|
| 21 | int empty = 2;
|
|---|
| 22 | object pom = prop.GetValue(instance);
|
|---|
| 23 | if (pom != null)
|
|---|
| 24 | {
|
|---|
| 25 | object typek = pom.GetType();
|
|---|
| 26 | if (pom.GetType().Name == "Int32")
|
|---|
| 27 | {
|
|---|
| 28 | empty = Convert.ToInt32(pom);
|
|---|
| 29 | }
|
|---|
| 30 | }
|
|---|
| 31 | foreach (ValidationAttribute attribute in attributes) {
|
|---|
| 32 | if (!attribute.IsValid(prop.GetValue(instance)) || empty == 0) {
|
|---|
| 33 | errors.Add(new ErrorInfo(prop.Name, attribute.FormatErrorMessage(string.Empty), instance));
|
|---|
| 34 | }
|
|---|
| 35 | }
|
|---|
| 36 | }
|
|---|
| 37 | return errors;
|
|---|
| 38 | /* return from prop in TypeDescriptor.GetProperties(instance).Cast<PropertyDescriptor>()
|
|---|
| 39 | from attribute in prop.Attributes.OfType<ValidationAttribute>()
|
|---|
| 40 | where !attribute.IsValid(prop.GetValue(instance))
|
|---|
| 41 | select new ErrorInfo(prop.Name, attribute.FormatErrorMessage(string.Empty), instance);
|
|---|
| 42 | */
|
|---|
| 43 | }
|
|---|
| 44 | }
|
|---|
| 45 | } |
|---|
Notatka: Zobacz
TracBrowser
aby uzyskać więcej informacji.