コード例 #1
0
ファイル: BaseControlHelper.cs プロジェクト: sunsiz/We7CMS
        /// <summary>
        /// 用ParameterAttribute复制一个DataControlParameter
        /// </summary>
        /// <param name="name">属性名</param>
        /// <param name="pa"></param>
        #region DataControlParameter CopyDCPfromParam(string name,ParameterAttribute pa)
        private DataControlParameter CopyDCPfromParam(string name, ParameterAttribute pa)
        {
            DataControlParameter param = new DataControlParameter();

            param.Name         = name;
            param.Data         = pa.Data;
            param.DefaultValue = pa.DefaultValue;
            param.Description  = pa.Description;
            param.Ignore       = pa.Ignore;
            param.Length       = pa.Length;
            param.Maximum      = pa.Maxnum.ToString();
            param.Minium       = pa.Minnum.ToString();
            param.Required     = pa.Required;
            param.Title        = pa.Title;
            param.Type         = pa.Type;
            param.Weight       = pa.Weight;
            param.SupportCopy  = pa.SupportCopy;

            return(param);
        }
コード例 #2
0
ファイル: BaseControlHelper.cs プロジェクト: sunsiz/We7CMS
        /// <summary>
        /// 通过MetaData字段来筛选ParameterAttribute属性
        /// </summary>
        /// <param name="o">控件</param>
        /// <param name="prefix">前缀</param>
        /// <returns>属性名 ParameterAttribute 键值对</returns>
        #region static Dictionary<string,ParameterAttribute> FilterParamAttrs(object o,string prefix)
        public static Dictionary <string, ParameterAttribute> FilterParamAttrs(object o, string prefix)
        {
            Dictionary <string, ParameterAttribute> dictParamAttr             = new Dictionary <string, ParameterAttribute>();
            Dictionary <string, ParameterAttribute> dictParamAttrOnMetaData   = new Dictionary <string, ParameterAttribute>();
            List <RemoveParameterAttribute>         listParamRemoveOnMetaData = new List <RemoveParameterAttribute>();
            List <ClearParameterAttribute>          listParamClearOnMetaData  = new List <ClearParameterAttribute>();

            foreach (PropertyInfo prop in o.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
            {
                string name = !String.IsNullOrEmpty(prefix) ? String.Format("{0}-{1}", prefix, prop.Name) : prop.Name;

                if (Attribute.IsDefined(prop, typeof(ParameterAttribute)))
                {
                    if (prop.Name == "MetaData")
                    {
                        //MetaData可有多个元标记
                        //覆盖(在MetaData上使用ParameterAttribute的Name属性来进行覆盖)
                        List <ParameterAttribute> pars = GetAttributes <ParameterAttribute>(prop);
                        foreach (ParameterAttribute par in pars)
                        {
                            dictParamAttrOnMetaData.Add(par.Name, par);
                        }
                        //移除
                        List <RemoveParameterAttribute> parsRemove = GetAttributes <RemoveParameterAttribute>(prop);
                        listParamRemoveOnMetaData.AddRange(parsRemove);
                        //清除
                        List <ClearParameterAttribute> parsClear = GetAttributes <ClearParameterAttribute>(prop);
                        listParamClearOnMetaData.AddRange(parsClear);
                    }
                    else
                    {
                        ParameterAttribute par = GetAttribute <ParameterAttribute>(prop);
                        if (par != null)
                        {
                            //如果Name为空,则Name对应属性名称
                            if (string.IsNullOrEmpty(par.Name))
                            {
                                par.Name = prop.Name;
                            }
                            dictParamAttr.Add(prop.Name, par);
                        }
                    }
                }
                //反射属性字段的内部
                if (Attribute.IsDefined(prop, typeof(ChildrenAttribute)))
                {
                    object child = prop.GetValue(o, null);
                    GetParamAttrs(o, prop.Name, ref dictParamAttr);
                }
            }
            foreach (FieldInfo prop in o.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase))
            {
                string name = !String.IsNullOrEmpty(prefix) ? String.Format("{0}-{1}", prefix, prop.Name) : prop.Name;


                if (prop.Name == "MetaData")
                {
                    //MetaData可有多个元标记
                    //覆盖(在MetaData上使用ParameterAttribute的Name属性来进行覆盖)
                    List <ParameterAttribute> pars = GetAttributes <ParameterAttribute>(prop);
                    foreach (ParameterAttribute par in pars)
                    {
                        if (!String.IsNullOrEmpty(par.Name))
                        {
                            dictParamAttrOnMetaData.Add(par.Name, par);
                        }
                    }
                    //移除
                    List <RemoveParameterAttribute> parsRemove = GetAttributes <RemoveParameterAttribute>(prop);
                    listParamRemoveOnMetaData.AddRange(parsRemove);
                    //清除
                    List <ClearParameterAttribute> parsClear = GetAttributes <ClearParameterAttribute>(prop);
                    listParamClearOnMetaData.AddRange(parsClear);
                }
                else
                {
                    ParameterAttribute par = GetAttribute <ParameterAttribute>(prop);
                    if (par != null)
                    {
                        //如果Name为空,则Name对应属性名称
                        if (string.IsNullOrEmpty(par.Name))
                        {
                            par.Name = prop.Name;
                        }
                        if (!dictParamAttr.ContainsKey(prop.Name))
                        {
                            dictParamAttr.Add(prop.Name, par);
                        }
                    }
                }

                //反射属性字段的内部
                if (Attribute.IsDefined(prop, typeof(ChildrenAttribute)))
                {
                    object child = prop.GetValue(o);
                    GetParamAttrs(child, prop.Name, ref dictParamAttr);
                }
            }

            if (dictParamAttr.Count == 0)
            {
                return(null);
            }
            if (dictParamAttrOnMetaData.Count == 0 && listParamClearOnMetaData.Count == 0 && listParamRemoveOnMetaData.Count == 0)
            {
                return(dictParamAttr);
            }

            //清空属性不为空,则返回MetaData上的ParamterAttribute集合
            if (listParamClearOnMetaData.Count > 0)
            {
                return(dictParamAttrOnMetaData);
            }

            if (listParamRemoveOnMetaData.Count > 0)
            {
                //移除
                foreach (RemoveParameterAttribute parRemove in listParamRemoveOnMetaData)
                {
                    dictParamAttr.Remove(parRemove.PropertyName);
                }
                //重写(移除属性重名项)
                foreach (KeyValuePair <string, ParameterAttribute> pair in dictParamAttrOnMetaData)
                {
                    dictParamAttr.Remove(pair.Key);
                }
            }
            if (dictParamAttr.Count > 0)
            {
                //转储
                foreach (KeyValuePair <string, ParameterAttribute> pair in dictParamAttr)
                {
                    if (!dictParamAttrOnMetaData.ContainsKey(pair.Key))
                    {
                        dictParamAttrOnMetaData.Add(pair.Key, pair.Value);
                    }
                }
            }

            return(dictParamAttrOnMetaData);
        }