コード例 #1
0
 public MethodInfo CandidateMethod()
 {
     if (_candidate == null)
     {
         IEnumerable <MethodInfo> candidates = CandidateMethods();
         candidates = candidates.OrderBy(m => m.GetParameters().Length);
         _candidate = candidates.FirstOrDefault();
         if (_candidate == null)
         {
             throw HtmlHelperTagException.NoSuitableMethodFound(MethodName, AsExpectations(Parameters)).Decorate(
                       Context);
         }
     }
     return(_candidate);
 }
コード例 #2
0
        public object[] AssembleParameters(MethodInfo method, HtmlHelper helper, TagModel model)
        {
            Dictionary <string, object> parameterTable = Parameters.ToDictionary(p => p.Name.ToLowerInvariant(),
                                                                                 p => p.Value(model));

            parameterTable.Add(Html.HTMLHELPER_PARAM_NAME.ToLowerInvariant(), helper);
            var    parameterValues = new List <object>();
            string parameterName   = null;

            try
            {
                foreach (ParameterInfo parameter in method.GetParameters())
                {
                    parameterName = parameter.Name.ToLowerInvariant();
                    parameterValues.Add(TypeConverter.To(parameterTable[parameterName], parameter.ParameterType));
                }
            } catch (KeyNotFoundException)
            {
                throw HtmlHelperTagException.RequiredArgumentMissing(parameterName, method).Decorate(Context);
            }
            return(parameterValues.ToArray());
        }