ASP.NETでのFormフォームフィールド値の操作モデルへの自動入力を実現

3240 ワード

私たちはASPを知っています.NET MVCでは、Formフォームがactionにコミットされたときに、Formのパラメータをactionのパラメータエンティティオブジェクトに直接アセンブリできる点が強力です
たとえば
 
  
action Register(UserModel userModel)

{

   ............................. 

}


フォームを提出する時、自動的にフォームの中のフィールドが対応するUserModelフィールドにカプセル化されます.
ではWebFormでも紫将でもいいのでしょうか?
毎回データを取得するので、優秀なプログラマーはコードのパッケージ、コードの多重化、繰り返しの仕事を学ばなければならない.
反射を利用してオブジェクトをインスタンス化することができます(自動アセンブリ)
よしくだらないことは多くない....
pageloadの中は簡単です
 
  
protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPost())
            {
                InitPage();//
            }
            else
            {
                UserModel userModel = AssembleModel(base.valueCollection);
            }
        }

肝心なのはベースクラスの中のAssembleModelの方法です
ベースクラス内
まずコンテキストのパラメータIT 404を取得する
 
  
protected NameValueCollection valueCollection = HttpContext.Current.Request.Params;

ベースクラスは簡単です.コンテキストのコミットパラメータをvalueCollectionに保存します.
それからAssembleModelの方法を見てみましょう.これは汎用的な方法です.
 
  
///
        ///
        ///

        ///
        ///
        protected PropertyInfo[] GetPropertyInfoArray(Type type)
        {
            PropertyInfo[] props = null;
            try
            {
                object obj = Activator.CreateInstance(type);
                props = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
            }
            catch (Exception ex)
            {

            }
            return props;
        }

        ///


        /// NameValueCollection
        ///

        ///
        ///
        ///
        protected T AssembleModel(NameValueCollection valueCollection)
        {
            PropertyInfo[] propertyInfoList = GetPropertyInfoArray(typeof(T));
            object obj = Activator.CreateInstance(typeof(T), null);//
            foreach (string key in valueCollection.Keys)//
            {
                foreach (var PropertyInfo in propertyInfoList)//
                {
                    if (key.ToLower() == PropertyInfo.Name.ToLower())
                    {
                        PropertyInfo.SetValue(obj, valueCollection[key], null);//
                    }
                }
            }
            return (T)obj;
        }


簡単です.パラメータを遍歴し、エンティティクラスの共有属性を反射で遍歴し、名前nameに基づいて一致して値を割り当てます.
クライアントから保存された値をコード1つで自動的に組み立てることができます
 
  
UserModel userModel = AssembleModel(base.valueCollection);