ASP.NET MVC Core — расширение привязки модели для обработки пустых списковC#

Место общения программистов 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?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»