Мы используем настройку VB.Net MVC5.
Я пытаюсь программно вызвать Html.MyCustomHelperB () из другого Html.MyCustomHelperA (), который вызывается со страницы просмотра бритвы.
Вот что у меня есть:
Модель представления определяет простой список (Of Dictionary (Of String, Object))), например,
Public InputList As New List(Of Dictionary(Of String, Object))
InputList.Add(New Dictionary(Of String, Object) From {
{"HelperName", "MyCustomHelperB"},
{"HelperParams", New List(Of String) From {"Hello", "World"} }
})
Представление бритвы вызывает MyCustomHelperA, передавая inputList в качестве параметра:
@Html.MyCustomHelperA(Model.InputList)
Вспомогательный метод MyCustomHelperA выглядит следующим образом:
<Extension()>
Public Function MyCustomHelperA(ByVal html As HtmlHelper, ByVal inputList As List(Of Dictionary(Of String, Object))) As IHtmlString
Dim Result As String = ""
' loop through each element in the inputList
For Each Input As Dictionary(Of String, Object) In inputList
' Programatially call the html helper given in the Input("HelperName") string, in this example it will be "MyCustomHelperB", and passing the params given in Input("HelperParams"), in this example: {"Hello", "World"}
Result &= html.GetType().InvokeMember(Input("HelperName"), BindingFlags.InvokeMethod Or BindingFlags.Instance Or BindingFlags.Public Or BindingFlags.NonPublic, Nothing, html, Input("HelperParams").ToArray()) ' <-- throws exception here !!!!
'Expecting the above to call: Html.MyCustomHelperB("Hello","World")
Next
Return html.Raw(Result)
End Function
Я получаю следующую ошибку исключения:
Метод 'System.Web.Mvc.HtmlHelper`1 [[MyProject.MyView, MyProject,
Версия = 1.0.0.0, Культура = нейтральная,
PublicKeyToken = null]]. MyCustomHelperB 'не найден.
Для справки это MyCustomHelperB, но выполнение кода никогда не зашло так далеко
<Extension()>
Public Function MyCustomHelperB(ByVal html As HtmlHelper, ByVal P1 As String, ByVal P2 As String) As IHtmlString
' never make it this far in execution
Dim Result As String = "<div>Testing. P1: " & P1 & ", P2: " & P2 & "</div>"
Return html.Raw(Result)
End Function
FYI:
Если я жестко закодирую Html.MyCustomHelperB («Hello», «World») в MyCustomHelperA вместо того, чтобы пытаться использовать строку InvokeMethod, тогда он работает просто отлично, поэтому я знаю, что MyCustomHelperB существует.