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), который позволяет легко связывать сложные типы, включая массивы.

Смотрите http://blogger.forgottenskies.com/?p=258

Самое близкое, я думаю, что это придет, это переопределение ToString() метод в классе для вывода значимой информации в DropDownList - но не более того.

Возможно, вы сможете связать коллекцию IEnumerable с DropDownList и затем извлечь его SelectedItem при отправке формы - это самый дешевый способ, который я могу себе представить.

Другие вопросы по тегам