簡體   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