將form表單元素轉為實體對象 或集合 -ASP.NET C#


簡介:

做WEBFROM開發的同學都知道后台接收參數非常麻煩

雖然MVC中可以將表單直接轉為集實,但不支持表單轉為 LIST<T>這種集合

 

單個對象的用法:

表單:

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


            //現在寫法
            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>
    /// ** 描述:表單幫助類
    /// ** 創始時間:2015-4-17
    /// ** 修改時間:-
    /// ** 作者:sunkaixuan
    /// ** qq:610262374 歡迎交流,共同提高 ,命名語法等寫的不好的地方歡迎大家的給出寶貴建議
    /// </summary>
    public class RequestToModel
    {

        /// <summary>
        /// 提交表單通過反射獲取單個像
        /// 注意:表單控件name必包含對應類中的第一個字段,否則將報錯
        /// </summary>
        public static T GetSingleForm<T>() where T : new()
        {
            T t = SetList<T>(null, 0).Single();
            return t;
        }


        /// <summary>
        /// 提交表單通過反射獲取單個像
        /// 注意:表單控件name必包含對應類中的第一個字段,否則將報錯
        /// <param name="appstr">控件前綴,比如 name="form1.sex" appstr可以設為form1</param>
        /// </summary>
        public static T GetSingleForm<T>(string appstr) where T : new()
        {
            T t = SetList<T>(appstr, 0).Single();
            return t;
        }

        /// <summary>
        /// 提交表單通過反射獲取多個對像
        /// 注意:表單控件name必包含對應類中的第一個字段,否則將報錯
        /// </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>
        /// 提交表單通過反射獲取多個對像
        /// 注意:表單控件name必包含對應類中的第一個字段,否則將報錯
        /// </summary>
        /// <typeparam name="type"></typeparam>
        /// <param name="appstr">控件前綴,比如 name="form1.sex" appstr可以設為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>
        /// 提交表單通過反射獲取多個對像
        /// </summary>
        /// <typeparam name="type"></typeparam>
        /// <param name="appstr">控件前綴,比如 name="form1.sex" appstr可以設為form1</param>
        /// <typeparam name="index">表單控件中第一個控件,對應類中字段在該類中的索引號,特殊情況可以是第二第三控件</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;
        }
    }
}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM