Пользовательский образцовый редактор связей для свойства

У меня есть следующее действие контроллера:

[HttpPost]
public ViewResult DoSomething(MyModel model)
{
    // do something
    return View();
}

Где MyModel похож на это:

public class MyModel
{
    public string PropertyA {get; set;}
    public IList<int> PropertyB {get; set;}
}

Таким образом, DefaultModelBinder должен связать это без проблемы. Единственная вещь состоит в том, что я хочу использовать специальный/пользовательский редактор связей для привязки PropertyB и я также хочу снова использовать этот редактор связей. Таким образом, я думал, что решение будет состоять в том, чтобы поместить атрибут ModelBinder перед PropertyB, который, конечно, не работает (атрибут ModelBinder не позволяется на свойства). Я вижу два решения:

  1. Для использования параметров действия на каждом свойстве вместо целой модели (который я не предпочел бы как, модель имеет много свойств) как это:

    public ViewResult DoSomething(string propertyA, [ModelBinder(typeof(MyModelBinder))] propertyB)
    
  2. Создать новый тип позволяет, говорят MyCustomType: List<int> и редактор связей модели регистра для этого типа (это - опция),

  3. Возможно, создать редактор связей для MyModel, переопределения BindProperty и если свойство "PropertyB" свяжите свойство с моим пользовательским редактором связей. Действительно ли это возможно?

Есть ли какое-либо другое решение?

32
задан KyleMit 7 December 2017 в 20:21
поделиться

1 ответ

переопределить BindProperty, и если свойство - "PropertyB", свяжите свойство с моим настраиваемым связывателем

Это хорошее решение, хотя вместо проверки «is PropertyB» вам лучше проверить свои собственные настраиваемые атрибуты, которые определяют привязки на уровне свойств, например

[PropertyBinder(typeof(PropertyBBinder))]
public IList<int> PropertyB {get; set;}

. Пример переопределения BindProperty можно увидеть здесь .

19
ответ дан 27 November 2019 в 21:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: