Используя VB.Net, Как использовать InvokeMember в настраиваемом помощнике по Html для программного вызова другого вспомогательного метода по HTML? - PullRequest
0 голосов
/ 07 июня 2019

Мы используем настройку 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 существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...