Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
 
dima19972525
2 / 2 / 1
Регистрация: 26.04.2016
Сообщений: 68
1

Как включить валидацию в кастомном привязчике модели

25.01.2018, 21:52. Просмотров 332. Ответов 0
Метки нет (Все метки)

Здравствуйте, написал привязчик:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    public class CityBinder : IModelBinder
    {
        public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            var valueProvider = bindingContext.ValueProvider;
            // получаем данные по одному полю
            ValueProviderResult vprId = valueProvider.GetValue("Id");
 
            // получаем данные по остальным полям
            string name = (string)valueProvider.GetValue("Name").ConvertTo(typeof(string));
            City c = new City() { Name = name + "*" };
 
            if (vprId != null)
            {
                c.Id = (int)vprId.ConvertTo(typeof(int));
            }
            return c;
        }
    }
И провайдер валидации:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
public class CityValidatorProvider : ModelValidatorProvider
    {
        public override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context)
        {
            if (metadata.ContainerType == typeof(City))
            {
                return new ModelValidator[] { new CityPropertyValidator(metadata, context) };
            }
 
            if (metadata.ModelType == typeof(City))
            {
                return new ModelValidator[] { new CityValidator(metadata, context) };
            }
 
            return Enumerable.Empty<ModelValidator>();
        }
    }
 
    public class CityPropertyValidator : ModelValidator
    {
        public CityPropertyValidator(ModelMetadata metadata, ControllerContext context)
            : base(metadata, context)
        {
        }
 
        public override IEnumerable<ModelValidationResult> Validate(object container)
        {
            City b = container as City;
            if (b != null)
            {
                if (string.IsNullOrEmpty(b.Name) || b.Name.Length > 10)
                {
                    return new ModelValidationResult[]{
                        new ModelValidationResult { MemberName="", Message="Пустая строка или >10"}
                        };
                }
 
            }
            return Enumerable.Empty<ModelValidationResult>();
        }
    }
 
    public class CityValidator : ModelValidator
    {
        public CityValidator(ModelMetadata metadata, ControllerContext context)
            : base(metadata, context)
        { }
 
        public override IEnumerable<ModelValidationResult> Validate(object container)
        {
            City b = (City)Metadata.Model;
 
            List<ModelValidationResult> errors = new List<ModelValidationResult>();
 
            if (b.Name == "Europe")
            {
                errors.Add(new ModelValidationResult { MemberName = "", Message = "!= Europe" });
            }
            return errors;
        }
    }
Вот их подключение в Global.asax:
C#
1
2
3
4
5
6
7
8
9
10
11
        protected void Application_Start()
        {
            ModelBinders.Binders.Add(typeof(City), new CityBinder());
            ModelValidatorProviders.Providers.Add(new CityValidatorProvider());
 
            ValueProviderFactories.Factories.Add(new Task15.Providers.RandomValueProviderFactory());
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
Дело в том, что моя валидация не срабатывает из-за этого привязчика (я пробовал запускать без него - все работает).
Как исправить?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2018, 21:52
Ответы с готовыми решениями:

Как добавить валидацию к сформированным классам EDMX модели?
Как добавить валидацию к сформированным классам EDMX модели? Если при изменении БД, придется...

Как в Anylogic провести валидацию и верификацию модели?
Построена модель из системной динамики, необходимо провести её валидацию и верификацию

Как правильно написать валидацию для модели в Backbone
Привет. Я посмотрел вот этот коротенький урок. И сделал всё как там: var Person =...

Как получить доступ к контролу через отдельный поток в кастомном классе?
Ошибка: Невозможно получить доступ к нестатическому члену внешнего типа &quot;Хурда.Form1&quot; через...

Как включить Java script,чтобы можно было включить программный фрагмент в HTML?
Как включить Java script,чтобы можно было включить программный фрагмент в HTML?

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2018, 21:52

Как проводить валидацию?
Прошу прощения , а как проводить валидацию?

Как реализовать валидацию?
Добрый день.Пишу валидацию для сайта.Имею отдельные валидаторы. Например вот этот &lt;?php ...

Как написать свою валидацию
Парни подскажите как правильно написать валидацию Валидация при создании, изменении, поиске и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru