程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET中實現Form表單字段值自動填充到操作模型中

ASP.NET中實現Form表單字段值自動填充到操作模型中

編輯:關於ASP.NET

       這篇文章主要介紹了ASP.NET中實現Form表單字段值自動填充到操作模型中,本文模仿MVC模式中的自動映射表單了模型,使用泛型和反射實現,需要的朋友可以參考下

      我們知道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 方法了

      基類裡面

      我們首先獲取到上下文的參數 IT404

       代碼如下:

      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來匹配和賦值

      所以以後我們只需要一句代碼 就能自動裝配上從客戶端存過來的值了

      代碼如下:

      UserModel userModel = AssembleModel(base.valueCollection);

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved