繁体   English   中英

ASP.NET MVC 3动态表单生成

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM