ASP.NET MVC - атрибуты динамического класса - PullRequest
0 голосов
/ 11 августа 2011

Я пытаюсь решить следующую проблему. У меня есть базовый класс, который хранит данные, скажем, для человека. Когда создается новая персона, только некоторые из этих данных будут заполнены через форму, т. Е. Имя, фамилия. Когда человек сохраняется в БД, ему также присваивается идентификатор.

Class Person
    Public Property ID As Integer
    Public Property Firstname As String
    Public Property Lastname As String
    Public Property Age As Integer
    Public Property Location As String
    Public Property Gender As String

У меня также есть класс Task, который будет контролировать ввод остальных атрибутов человека. Задача назначается пользователю и требует, чтобы он завершил один атрибут класса Person.

Class Task
    Public Property ID As Integer
    Public Property ParentPerson As Person
    Public Property AssignedUser As User
    Public Property Attribute As String

Мне интересно, как мне лучше всего добиться возможности открыть задание, загрузить текстовое поле для атрибута и сохранить его обратно в БД?

Заранее спасибо!

1 Ответ

0 голосов
/ 12 августа 2011

Не похоже, что ваша проблема связана с MVC, похоже, вы ищете способ получить имя свойства с использованием подходящего имени строки.

Я верю, что есть и другие способы сделать это, но я знаю, что это отражение. Предупреждение: мне всегда говорили, что отражение медленное, опасное и не должно использоваться без необходимости.

Type t = typeof(Person);
FieldInfo f = t.getField(Task.Attribute);
string oldValue = (string) f.GetValue(person); //gets old string given Person person
f.SetValue(person, "xx"); // sets value of person.Take.Attribute to "xx"

Возможно, ваша модель данных будет лучше, как эта

Class Person
    Public Property ID As Integer
    Public Property Attributes As List<PersonAttribute>

Class PersonAttribute
    Public Property Id as String //FirstName, LastName, etc
    Public Property Value as String
    Public Property DisplayName as String //if you need some label for html pages

Тогда вы можете просто получить нужный атрибут PersonA с помощью запроса where на id == Task.Attribute

См. http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/ или выполните поиск по шаблонам редактора, чтобы увидеть, как можно связать сложный список с контроллером в mvc.

...