ASP.NET中實(shí)現(xiàn)把form表單元素轉(zhuǎn)為實(shí)體對象或集合
簡介:
做WEBFROM開發(fā)的同學(xué)都知道后臺接收參數(shù)非常麻煩
雖然MVC中可以將表單直接轉(zhuǎn)為集實(shí),但不支持表單轉(zhuǎn)為 LIST<T>這種集合
單個(gè)對象的用法:
表單:
<input name='id' value='1' >
<input name='sex' value='男' >
后臺:
//以前寫法
DLC_category d = new DLC_category();
d.sex = Request["sex"];
d.id = Convert.ToInt32(Request["id"]);
//現(xiàn)在寫法
var category = RequestToModel.GetSingleForm<DLC_category>();
集合對象的用法:
表單:
<input name='id' value='1' >
<input name='sex' value='男' >
<input name='id' value='2' >
<input name='sex' value='女' >
<input name='id' value='3' >
<input name='sex' value='女' >
后臺:
List<DLC_category> categoryLists = RequestToModel.GetListByForm<DLC_category>();
源碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace SyntacticSugar
{
/// <summary>
/// ** 描述:表單幫助類
/// ** 創(chuàng)始時(shí)間:2015-4-17
/// ** 修改時(shí)間:-
/// ** 作者:sunkaixuan
/// ** qq:610262374 歡迎交流,共同提高 ,命名語法等寫的不好的地方歡迎大家的給出寶貴建議
/// </summary>
public class RequestToModel
{
/// <summary>
/// 提交表單通過反射獲取單個(gè)像
/// 注意:表單控件name必包含對應(yīng)類中的第一個(gè)字段,否則將報(bào)錯(cuò)
/// </summary>
public static T GetSingleForm<T>() where T : new()
{
T t = SetList<T>(null, 0).Single();
return t;
}
/// <summary>
/// 提交表單通過反射獲取單個(gè)像
/// 注意:表單控件name必包含對應(yīng)類中的第一個(gè)字段,否則將報(bào)錯(cuò)
/// <param name="appstr">控件前綴,比如 name="form1.sex" appstr可以設(shè)為form1</param>
/// </summary>
public static T GetSingleForm<T>(string appstr) where T : new()
{
T t = SetList<T>(appstr, 0).Single();
return t;
}
/// <summary>
/// 提交表單通過反射獲取多個(gè)對像
/// 注意:表單控件name必包含對應(yīng)類中的第一個(gè)字段,否則將報(bào)錯(cuò)
/// </summary>
/// <typeparam name="type"></typeparam>
/// <param name="type"></param>
/// <returns></returns>
public static List<T> GetListByForm<T>() where T : new()
{
List<T> t = SetList<T>(null, 0);
return t;
}
/// <summary>
/// 提交表單通過反射獲取多個(gè)對像
/// 注意:表單控件name必包含對應(yīng)類中的第一個(gè)字段,否則將報(bào)錯(cuò)
/// </summary>
/// <typeparam name="type"></typeparam>
/// <param name="appstr">控件前綴,比如 name="form1.sex" appstr可以設(shè)為form1</param>
/// <returns></returns>
public static List<T> GetListByForm<T>(string appstr) where T : new()
{
List<T> t = SetList<T>(appstr, 0);
return t;
}
/// <summary>
/// 提交表單通過反射獲取多個(gè)對像
/// </summary>
/// <typeparam name="type"></typeparam>
/// <param name="appstr">控件前綴,比如 name="form1.sex" appstr可以設(shè)為form1</param>
/// <typeparam name="index">表單控件中第一個(gè)控件,對應(yīng)類中字段在該類中的索引號,特殊情況可以是第二第三控件</typeparam>
/// <returns></returns>
private static List<T> GetListByForm<T>(string appstr, int index) where T : new()
{
List<T> t = SetList<T>(appstr, index);
return t;
}
private static List<T> SetList<T>(string appendstr, int index) where T : new()
{
List<T> t = new List<T>();
try
{
var properties = new T().GetType().GetProperties();
var subNum = System.Web.HttpContext.Current.Request[appendstr + properties[index].Name].Split(',').Length;
for (int i = 0; i < subNum; i++)
{
var r = properties;
var model = new T();
foreach (var p in properties)
{
string pval = System.Web.HttpContext.Current.Request[appendstr + p.Name + ""];
if (!string.IsNullOrEmpty(pval))
{
pval = pval.Split(',')[i];
string pptypeName = p.PropertyType.Name;
p.SetValue(model, Convert.ChangeType(pval, p.PropertyType), null);
}
}
t.Add(model);
}
}
catch (Exception ex)
{
throw ex;
}
return t;
}
}
}
相關(guān)文章
ASP.NET實(shí)現(xiàn)License Key輸入功能的小例子
當(dāng)我們安裝微軟的軟件,多數(shù)軟件是需要輸入license key。它有五個(gè)文本框,輸入完第一個(gè)文本框之后,光標(biāo)自動跳至下一個(gè)文本框。 Insus.NET今天也使用asp.net來模仿一個(gè)。呵呵。2013-03-03
ASP.NET自帶對象JSON字符串與實(shí)體類的轉(zhuǎn)換
這篇文章主要介紹了ASP.NET自帶對象JSON字符串與實(shí)體類的轉(zhuǎn)換,感興趣的小伙伴們可以參考一下2016-07-07
MVC使用Log4Net進(jìn)行錯(cuò)誤日志記錄學(xué)習(xí)筆記4
這篇文章主要為大家詳細(xì)介紹了MVC使用Log4Net進(jìn)行錯(cuò)誤日志記錄,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09
WPF使用VisualTreeHelper進(jìn)行命中測試
這篇文章介紹了WPF使用VisualTreeHelper進(jìn)行命中測試的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04
.net數(shù)據(jù)庫連接池配置技巧(默認(rèn)值)
ado.net 本就有連接功能,所有.net開法基本不用去考慮連接問題,怪不得.net的連接池資料網(wǎng)上找不到。.net連接池只要在連接字符串里配制就可以了2008-12-12
微信JS-SDK分享功能的.Net實(shí)現(xiàn)代碼
這篇文章主要介紹了微信JS-SDK分享功能的.Net實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-09-09
Windows Server 2012 R2 Standard搭建ASP.NET Core環(huán)境圖文教程
這篇文章主要介紹了Windows Server 2012 R2 Standard搭建ASP.NET Core環(huán)境圖文教程,需要的朋友可以參考下2016-07-07

