Я пытаюсь создать форму во время выполнения.Я закончил с этим подходом
@using (Html.BeginForm()) {
@foreach (var propertyInfo in typeof(MvcApplication1.Models.LogOnModel).GetProperties()) {
if (propertyInfo.PropertyType == typeof(Boolean)) {
Html.CheckBoxFor(m => new PropertyWrapper<Boolean>(propertyInfo, Model).Property);
}
else if (propertyInfo.PropertyType == typeof(String)) {
Html.TextBoxFor(m => new PropertyWrapper<String>(propertyInfo, Model).Property);
}
...
}
}
С этим классом, чтобы позволить методам [ElementType]For()
работать (им нужна ссылка на свойство, которое не может быть получено с помощью отражения).
public class PropertyWrapper<T> {
private PropertyInfo _propertyInfo;
private Object _instance;
public PropertyWrapper(PropertyInfo propertyInfo, Object instance) {
_propertyInfo = propertyInfo;
_instance = instance;
}
public T Property {
get { return (T)_propertyInfo.GetValue(_instance, null); }
set { _propertyInfo.SetValue(_instance, value, null); }
}
}
Я получаю следующую ошибку
System.Reflection.TargetException: Non-static method requires a target.
, потому что instance
параметр конструктора PropertyWrapper
равен нулю.Я что-то пропустил?Это вообще возможно?