溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

asp.net如何使用反射,泛型,靜態(tài)方法快速獲取表單值到Model

發(fā)布時(shí)間:2021-08-27 11:06:02 來(lái)源:億速云 閱讀:110 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要為大家展示了“asp.net如何使用反射,泛型,靜態(tài)方法快速獲取表單值到Model”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“asp.net如何使用反射,泛型,靜態(tài)方法快速獲取表單值到Model”這篇文章吧。

具體如下:

在項(xiàng)目中經(jīng)常需要處理表單,給model賦值,很煩人的一些重復(fù)代碼。如下邊的代碼:

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"]);

經(jīng)常還會(huì)出現(xiàn)寫(xiě)錯(cuò)情況,尤其是加班寫(xiě)這種無(wú)聊代碼的時(shí)候...

使用反射,泛型,靜態(tài)方法可以很容易解決這個(gè)問(wèn)題。說(shuō)的好像有點(diǎn)高深,其實(shí)超級(jí)簡(jiǎn)單。見(jiàn)代碼。

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);//為屬性賦值,并轉(zhuǎn)換鍵值的類型為該屬性的類型
      va++;//記錄賦值成功的屬性數(shù)
     }
     catch
     {
     }
    }
   }
   return va;
  }
}

只所以用靜態(tài)方法,主要是圖方便,不用new。
以后所有的表單都可以很簡(jiǎn)單的處理了,兩行代碼搞定。

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

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

以上是“asp.net如何使用反射,泛型,靜態(tài)方法快速獲取表單值到Model”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI