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); }
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()); }