У меня есть следующее действие контроллера:
[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 не позволяется на свойства). Я вижу два решения:
Для использования параметров действия на каждом свойстве вместо целой модели (который я не предпочел бы как, модель имеет много свойств) как это:
public ViewResult DoSomething(string propertyA, [ModelBinder(typeof(MyModelBinder))] propertyB)
Создать новый тип позволяет, говорят MyCustomType: List<int>
и редактор связей модели регистра для этого типа (это - опция),
Возможно, создать редактор связей для MyModel, переопределения BindProperty
и если свойство "PropertyB"
свяжите свойство с моим пользовательским редактором связей. Действительно ли это возможно?
Есть ли какое-либо другое решение?
переопределить BindProperty, и если свойство - "PropertyB", свяжите свойство с моим настраиваемым связывателем
Это хорошее решение, хотя вместо проверки «is PropertyB» вам лучше проверить свои собственные настраиваемые атрибуты, которые определяют привязки на уровне свойств, например
[PropertyBinder(typeof(PropertyBBinder))]
public IList<int> PropertyB {get; set;}
. Пример переопределения BindProperty можно увидеть здесь .