Мне удалось решить мою ситуацию, настроив обычный класс, который будет служить моделью для моего DanamicObject, и сохранив мои свойства следующим образом:
IList<DynamicProperty> DynamicProperties { get; set; }
Я создал собственное представление для DynamicObjectи в этом представлении я вызвал одного из помощников для отображения свойства DynamicProperties.Это позволяет MVC перебирать коллекцию и отображать каждое свойство.Далее у меня есть представление для DynamicProperty, которое я использую для отображения свойства по мере необходимости.Ключ также в том, что вы должны отобразить скрытое поле, содержащее первичный ключ этого конкретного атрибута.ModelBinder в MVC3 выполняет здесь гораздо лучшую работу, чем в MVc2, поэтому он будет отображать индекс массива как часть имени поля, так что первичный ключ и значение каждого свойства будут правильно сопоставлены при отправке.Вы, вероятно, захотите создать ViewModel специально для представленных данных, у меня были проблемы, когда я пытался использовать тот же класс модели, который использовался в представлениях деталей / редактирования, потому что я отображал только подмножество полей, поэтому они отсутствовали, когда я привязывался ктот же класс Model при обратной передаче.
Вы можете обработать сохранение, как обычно, но есть несколько соображений безопасности для этого типа объекта.Поскольку количество атрибутов является динамическим, нет способа гарантировать, что будет представлено то же количество полей, что и при исходной визуализации.Пользователь может добавить свое собственное или, что еще хуже, добавить поля для свойства, которое вы могли явно исключить.AntiForgeryToken предотвратил бы такого рода представления за пределами вашего домена, но с легкостью и популярностью манипулирования DOM, обеспечиваемого библиотеками, такими как jQuery, обратные передачи между сайтами - не единственная проблема, и я не знаю, будет ли AntiForgeryToken отвечать заэто, но я сомневаюсь в этом.
Этот подход оказался проще, чем пытаться наследовать от DynamicObject, реализовывать GetDynamicMemberNames и создавать собственный ModelBinder для использования обтекания.
Однако я создалпользовательские ModelMetaData и Validation Provider для обработки этих аспектов, поскольку свойства не являются строго типизированными, поэтому у MVC не было никаких аннотаций для использования.