Ответ 1
Смотрите здесь и здесь и здесь для получения подробной информации о привязке модели.
Я пытаюсь работать, если есть встроенная поддержка привязки сложных типов к элементам.
Чтобы использовать общую гипотетическую ситуацию: У меня есть объект 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 при отправке формы?
Было бы довольно тривиально делать это вручную - я просто пытаюсь выяснить, что у меня может быть бесплатно из коробки.
Смотрите здесь и здесь и здесь для получения подробной информации о привязке модели.
Я еще не пробовал DefaultModelBinder для сложных типов, но вы всегда можете использовать MvcContrib CastleBind (заимствованный из Castle Project), который дает вам сложное связывание типов, включая массивы.
Пожалуйста, проверьте этот, так как я думаю, что он говорит о вашем вопросе, кажется, что ребята S # arp решили его, и это легко "rip" "может, если вы не используете их материал.
В любом случае, я думаю, что несколько опасно автоматически загружать объекты из любых сообщений пользователя... придется подумать об этом.
Ближе всего я думаю, что это произойдет, переопределяя метод ToString()
в классе, чтобы выводить значимую информацию в DropDownList - но не намного больше.
Возможно, вы сможете привязать коллекцию IEnumerable к DropDownList, а затем получить свой SelectedItem при отправке формы - это самый дешевый способ, о котором я могу думать.