/// <summary>
        /// 查找自动Submit的方法
        /// </summary>
        /// <param name="controllerContext"></param>
        /// <param name="actionName"></param>
        /// <returns></returns>
        public MethodInfo FindSubmitAction(ControllerContext controllerContext)
        {
            string[]          keys = controllerContext.HttpContext.Request.Form.AllKeys;
            List <MethodInfo> matchingAliasedMethods = new List <MethodInfo>(0);
            string            actionName             = string.Empty;

            foreach (var item in keys)
            {
                matchingAliasedMethods = GetMatchingAliasedMethods(controllerContext, item);
                if (matchingAliasedMethods.Any())
                {
                    actionName = item;
                    break;
                }
            }
            matchingAliasedMethods.AddRange(this.NonAliasedMethods[actionName]);
            List <MethodInfo> list = ActionMethodSelector.RunSelectionFilters(controllerContext, matchingAliasedMethods);

            switch (list.Count)
            {
            case 0:
                return(null);

            case 1:
                return(list[0]);

            default:
                throw this.CreateAmbiguousMatchException(list, actionName);
            }
        }
        /// <summary>
        /// 查找指定动作的方法
        /// </summary>
        /// <param name="controllerContext"></param>
        /// <param name="actionName"></param>
        /// <returns></returns>
        public MethodInfo FindActionMethod(ControllerContext controllerContext, string actionName)
        {
            //添加 PageUrl过来的也走刷选器
            List <MethodInfo> matchingAliasedMethods = null;

            if (controllerContext.RouteData.UsePageUrlRoute)
            {
                var data = controllerContext.RouteData.PageUrlData;
                if (data == null)
                {
                    return(null);
                }
                matchingAliasedMethods = new List <MethodInfo>(1)
                {
                    data.Item2
                };
            }
            else
            {
                matchingAliasedMethods = this.GetMatchingAliasedMethods(controllerContext, actionName);
                matchingAliasedMethods.AddRange(this.NonAliasedMethods[actionName]);
            }
            List <MethodInfo> list = ActionMethodSelector.RunSelectionFilters(controllerContext, matchingAliasedMethods);

            switch (list.Count)
            {
            case 0:
                // 如果Action的名字是submit并且是POST提交,则需要自动寻找Action
                // 例如:多个提交都采用一样的方式:POST /Ajax/Product/submit
                if (actionName.IsSame("submit") && controllerContext.HttpContext.Request.HttpMethod.IsSame("POST"))
                {
                    return(FindSubmitAction(controllerContext));
                }
                return(null);

            case 1:
                return(list[0]);

            default:
                throw this.CreateAmbiguousMatchException(list, actionName);
            }
        }
 /// <summary>
 /// 创建一个新的 ControllerDescriptor
 /// </summary>
 /// <param name="t"></param>
 public ControllerDescriptor(Type t)
 {
     this.ControllerType = t;
     _uniqueId           = new Lazy <string>(CreateUniqueId);
     this._selector      = new ActionMethodSelector(this.ControllerType);
 }