ASP.NET MVC: привязка сложного типа к выбору
Я пытаюсь выяснить, есть ли встроенная поддержка для привязки сложных типов к элементам формы.
Чтобы использовать общую гипотетическую ситуацию: у меня есть объект Product, который принадлежит категории - модели выглядят примерно так:
public class Product
{
public int ID { get; set; }
public string Description { get; set; }
public Category Category { get; set; }
}
public class Category
{
public int ID { get; set; }
public string Title { get; set; }
}
Создание формы для гидратации нового объекта, содержащего только простые типы значений, удобно и просто с помощью инфраструктуры ASP.Net MVC, например:
public ActionResult Create(Product product);
Но как насчет приведенного выше сценария, где ваши сущности содержат другие сложные типы? Существуют ли встроенные механизмы для привязки IEnumerable< T> к раскрывающемуся списку и последующего автоматического гидратации правильного T при отправке формы?
Было бы довольно тривиально сделать это вручную - я просто пытаюсь выяснить, что я могу получить бесплатно из коробки.
3 ответа
Пожалуйста, отметьте это, так как я думаю, что это говорит о вашем вопросе, кажется, что парни из S#arp решили его, и это легко "сорвать", если вы не используете их вещи.
В любом случае, я думаю, что несколько опасно автоматически загружать сущности из того, что публикует пользователь... придется подумать об этом.
Я еще не пробовал DefaultModelBinder для сложных типов, но вы всегда можете использовать CastleBind MvcContrib (заимствованный из Castle Project), который позволяет легко связывать сложные типы, включая массивы.
Самое близкое, я думаю, что это придет, это переопределение ToString()
метод в классе для вывода значимой информации в DropDownList - но не более того.
Возможно, вы сможете связать коллекцию IEnumerable с DropDownList и затем извлечь его SelectedItem при отправке формы - это самый дешевый способ, который я могу себе представить.