我想在運行時生成一個表單。我已經結束了這種方法ASP.NET MVC 3動態表單生成
@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.
因爲PropertyWrapper
構造instance
參數爲空。我錯過了什麼嗎?這甚至有可能嗎?
我沒意識到它們會被自動綁定!如果你給你的評論一個答案,我會接受。 – 2012-04-02 18:30:46
我把它移到了答案上。 – 2012-04-02 18:31:45