程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> ASP.NET基礎 >> asp.net實現利用反射,泛型,靜態方法快速獲取表單值到Model的方法

asp.net實現利用反射,泛型,靜態方法快速獲取表單值到Model的方法

編輯:ASP.NET基礎

本文實例講述了asp.net實現利用反射,泛型,靜態方法快速獲取表單值到Model的方法。分享給大家供大家參考,具體如下:

這是初級的,很簡單,牛人可以不看了。不過還算實用。

在項目中經常需要處理表單,給model賦值,很煩人的一些重復代碼。如下邊的代碼:

News news = new News();
news.Id = int.Parse(Request.Form["Id"]);
news.Category = int.Parse(Request.Form["Category"]);
news.Title = Request.Form["Title"];
news.CreateTime = DateTime.Parse(Request.Form["CreateTime"]);

經常還會出現寫錯情況,尤其是加班寫這種無聊代碼的時候...

使用反射,泛型,靜態方法可以很容易解決這個問題。說的好像有點高深,其實超級簡單。見代碼。

public static class HenqPost<T> where T: new()
{
  /// <summary>
  /// 為Model賦值
  /// </summary>
  /// <typeparam name="T">Model</typeparam>
  /// <param name="t">model</param>
  /// <param name="form">Request</param>
  /// <returns></returns>
  public static int GetPost<T>(ref T t, NameValueCollection form)
  {
   int va=0;
   Type type = t.GetType();//獲取類型
   PropertyInfo[] pi=type.GetProperties();//獲取屬性集合
   foreach( PropertyInfo p in pi )
   {
    if (form[p.Name] != null)
    {
     try
     {
      p.SetValue(t, Convert.ChangeType(form[p.Name], p.PropertyType), null);//為屬性賦值,並轉換鍵值的類型為該屬性的類型
      va++;//記錄賦值成功的屬性數
     }
     catch
     {
     }
    }
   }
   return va;
  }
}

只所以用靜態方法,主要是圖方便,不用new。
以後所有的表單都可以很簡單的處理了,兩行代碼搞定。

News news = new News();
HenqPost<News>.GetPost(ref news, Request.Form);
//煩人的為實體類賦值就Over了。

不需要任何配置,約定是最好的配置。
約定:表單項的名稱最好和實體類的屬性名字對應(如果你要不一樣,反射方法根據自己的規則改造下)。
為表單賦值,如果是webform的話也可以采取這種方式,可以自己寫下,原理差不多。

希望本文所述對大家asp.net程序設計有所幫助。

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