反射获取所有视图

Posted guxingy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反射获取所有视图相关的知识,希望对你有一定的参考价值。

原地址:忘了

controller 的 action 加上属性 [System.ComponentModel.Description("菜单列表")]  且  返回值为 System.Web.Mvc.ActionResult 类型,就可以获取到了

技术分享图片
 [System.ComponentModel.Description("菜单")]
        public ActionResult Index()
        {
            return View(DbContext.Menu.Where(c=>!c.IsDelete).OrderBy(c => c.Sort).ToList());
        }
View Code

 

技术分享图片
 /// <summary>
        /// 反射 获取方法
        /// </summary>
        /// <returns></returns>
        public string GetMethodByReflect()
        {
            string strhtml = "";
            var asm = System.Reflection.Assembly.GetExecutingAssembly();
            System.Collections.Generic.List<Type> typeList = new List<Type>();
            var types = asm.GetTypes();
            foreach (Type type in types)
            {
                if (type.FullName.StartsWith("MyMVC.Controllers.") && type.FullName.EndsWith("Controller"))
                {
                    typeList.Add(type);                   
                }
            }
            typeList.Sort(delegate (Type type1, Type type2) { return type1.FullName.CompareTo(type2.FullName); });
            foreach (Type type in typeList)
            {
                System.Reflection.MemberInfo[] members = type.FindMembers(System.Reflection.MemberTypes.Method,
                System.Reflection.BindingFlags.Public |
                (System.Reflection.BindingFlags.Static |
                System.Reflection.BindingFlags.NonPublic |
                System.Reflection.BindingFlags.Instance |
                System.Reflection.BindingFlags.DeclaredOnly),
                Type.FilterName, "*");
                

                //遍历成员
                foreach (var m in members)
                {
                    if (m.DeclaringType.Attributes.HasFlag(System.Reflection.TypeAttributes.Public) != true) { continue; }
                    string controller = type.Name.Replace("Controller", "");
                    string action = m.Name;

                    //str += $"{m.Name} - {type.FullName} - {m.DeclaringType.Attributes.ToString()}<br>";
                    MethodInfo method = type.GetMethod(m.Name);
                    if ((method != null) && (method.ReturnType.ToString() == "System.Web.Mvc.ActionResult"))
                    {
                        var DescAttr = (System.ComponentModel.DescriptionAttribute)Attribute.GetCustomAttribute(m, typeof(System.ComponentModel.DescriptionAttribute));
                        if (DescAttr != null)
                        {
                            strHtml += $"{m.Name} - {DescAttr.Description} - {method.ReturnType.ToString()} - <br>";
                        }
                    }
                }
            }            
            return strHtml;
        }
View Code

 

以上是关于反射获取所有视图的主要内容,如果未能解决你的问题,请参考以下文章

片段中的 notifyDataSetChanged() 不刷新列表视图

从图库中获取图像以在片段中的图像视图中设置? [复制]

当我从用户获取数据并将其保存到 SQLite 数据库中时,我应该怎么做才能使列表视图在片段中工作

如何使列表视图出现在片段中?

Android在活动视图中附加片段获取片段已添加错误

java如何通过反射获取包中所有的类?