ASP.NET MVC Core — расширение привязки модели для обработки пустых списков ⇐ C#
ASP.NET MVC Core — расширение привязки модели для обработки пустых списков
Поведением по умолчанию для связывателя модели является возврат значения null для перечислимых свойств, если запрос содержит пустой массив. Вместо этого я хотел бы вернуть пустую коллекцию. Для других свойств я хочу сохранить поведение по умолчанию.
Я перехожу с ASP.NET MVC на ASP.NET MVC Core. В старом проекте у меня была специальная привязка модели, расширяющая DefaultModelBinder. Однако DefaultModelBinder не существует в Core.
публичный класс EmptyListModelBinder: DefaultModelBinder { защищенный объект переопределения CreateModel (ControllerContext контроллерКонтекст, ModelBindingContext привязкаКонтекст, Тип modelType) { var model = base.CreateModel(controllerContext,bindingContext, modelType); if (модель == null || модель IEnumerable) возвратная модель; foreach (свойство var в modelType.GetProperties(BindingFlags.Public | BindingFlags.Instance)) { значение объекта = свойство.GetValue(модель); если (значение! = ноль) продолжать; если (свойство.PropertyType.IsArray) { значение = Array.CreateInstance(property.PropertyType.GetElementType(), 0); свойство.SetValue(модель, значение); } иначе, если (свойство.PropertyType.IsGenericType) { Введите типToCreate; Тип genericTypeDefinition = property.PropertyType.GetGenericTypeDefinition(); if (genericTypeDefinition == typeof(IDictionary)) { typeToCreate = typeof(Dictionary).MakeGenericType(property.PropertyType.GetGenericArguments()); } иначе, если (genericTypeDefinition == typeof(IEnumerable) || genericTypeDefinition == typeof(ICollection) || genericTypeDefinition == typeof(IList) || genericTypeDefinition == typeof(List)) { typeToCreate = typeof(List).MakeGenericType(property.PropertyType.GetGenericArguments()); } еще { продолжать; } значение = Activator.CreateInstance(typeToCreate); свойство.SetValue(модель, значение); } } возвратная модель; } } Я мог бы расширить ComplexTypeModelBinder, но он устарел. Его заменяет ComplexObjectModelBinder, который запечатан и не может быть унаследован или использован для композиции.
Как добиться такого поведения в ASP.NET Core?
Поведением по умолчанию для связывателя модели является возврат значения null для перечислимых свойств, если запрос содержит пустой массив. Вместо этого я хотел бы вернуть пустую коллекцию. Для других свойств я хочу сохранить поведение по умолчанию.
Я перехожу с ASP.NET MVC на ASP.NET MVC Core. В старом проекте у меня была специальная привязка модели, расширяющая DefaultModelBinder. Однако DefaultModelBinder не существует в Core.
публичный класс EmptyListModelBinder: DefaultModelBinder { защищенный объект переопределения CreateModel (ControllerContext контроллерКонтекст, ModelBindingContext привязкаКонтекст, Тип modelType) { var model = base.CreateModel(controllerContext,bindingContext, modelType); if (модель == null || модель IEnumerable) возвратная модель; foreach (свойство var в modelType.GetProperties(BindingFlags.Public | BindingFlags.Instance)) { значение объекта = свойство.GetValue(модель); если (значение! = ноль) продолжать; если (свойство.PropertyType.IsArray) { значение = Array.CreateInstance(property.PropertyType.GetElementType(), 0); свойство.SetValue(модель, значение); } иначе, если (свойство.PropertyType.IsGenericType) { Введите типToCreate; Тип genericTypeDefinition = property.PropertyType.GetGenericTypeDefinition(); if (genericTypeDefinition == typeof(IDictionary)) { typeToCreate = typeof(Dictionary).MakeGenericType(property.PropertyType.GetGenericArguments()); } иначе, если (genericTypeDefinition == typeof(IEnumerable) || genericTypeDefinition == typeof(ICollection) || genericTypeDefinition == typeof(IList) || genericTypeDefinition == typeof(List)) { typeToCreate = typeof(List).MakeGenericType(property.PropertyType.GetGenericArguments()); } еще { продолжать; } значение = Activator.CreateInstance(typeToCreate); свойство.SetValue(модель, значение); } } возвратная модель; } } Я мог бы расширить ComplexTypeModelBinder, но он устарел. Его заменяет ComplexObjectModelBinder, который запечатан и не может быть унаследован или использован для композиции.
Как добиться такого поведения в ASP.NET Core?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как добиться того же эффекта, что и ASP.Net MVC Server.Transfer в ASP.Net Core MVC?
Anonymous » » в форуме C# - 0 Ответы
- 98 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как добиться того же эффекта, что и ASP.NET MVC Server.Transfer в ASP.NET Core MVC?
Anonymous » » в форуме C# - 0 Ответы
- 105 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Реализация выхода из Azure B2C в приложениях ASP.NET Core MVC и ASP.NET MVC.
Anonymous » » в форуме C# - 0 Ответы
- 109 Просмотры
-
Последнее сообщение Anonymous
-