[英]ASP.NET MVC 3 dynamic form generation
我正在尝试在运行时生成表单。 我结束了这种方法
@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
参数为null。 我想念什么吗? 这有可能吗?
忘记强类型输入,XXXFor辅助函数和lambda表达式。 一旦启动了Reflection游戏,就必须玩到最后。
XXXFor助手使用非常简单的表达式(例如属性访问)来工作。
m => new PropertyWrapper<String>(propertyInfo, Model).Property
远远超出了这些帮助器的功能。
为什么不使用非“ for”方法? 例如@Html.CheckBox()
。 只需将属性的名称传递给方法,模型绑定将在回发后仍然有效
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.