КОРОТКАЯ ВЕРСИЯ
Как лучше всего использовать отражение, чтобы превратить что-то вроде string prop = "part1.first_name";
в System.Reflection.PropertyInfo
, чтобы я мог использовать функции GetValue и SetValue?
ДЛИТЕЛЬНАЯ ВЕРСИЯ
Я использую ASP .NET MVC для создания анкеты для своей организации.Это очень долго, поэтому он разделен на несколько разных страниц.Поскольку мы нередко получаем запросы типа «Можете ли вы переместить этот вопрос на эту страницу, а этот другой вопрос - на другую страницу», мне нужно создать его, чтобы он был достаточно гибким для изменения младшим программистом.
Моя модель представляет собой сложный класс (в нем пять классов-членов, которые имеют в основном свойства примитивного типа).
Итак, я обращаюсь к нему, выполняя такие действия, как Model.part1.first_name
или Model.part2.birth_date
.
Поскольку на всех страницах используется одна и та же модель, но не все вопросы есть на каждой странице, у меня есть атрибуты ActionAttributes, которые по существу очищают все свойства, представленные в форме , кроме для тех, которые были отображены на этой странице (чтобы кто-то не смог вставить скрытое поле в форму и сохранить значение в базе данных).
Я хочу убедиться, что я сохраняю только действительные полязначения и не позволяйте пользователю перейти на следующую страницу, пока текущая не будет полностью в порядке, но я также хочу сохранить значения, которые являются действительными, даже если пользователю не разрешено продолжать.
Для этого у меня есть функция, которая принимает два экземпляра моего класса модели, ссылку на ModelStateDictionary и string[]
имен полей, таких как"part1.first_name" и "part2.birth_date".Эта функция должна скопировать все значения, перечисленные в строковом массиве, которые не имеют ошибок проверки, из первого (то есть отправленного в форме) объекта во второй (то есть загруженный из базы данных) объект.
Как указано выше, как лучше всего использовать отражение, чтобы превратить что-то вроде «part1.first_name» в System.Reflection.PropertyInfo
, ИЛИ, есть ли лучший способ сделать это?