Проблема с использованием @ Ajax .ActionLink в MVC при передаче htmlAttributes - PullRequest
0 голосов
/ 02 апреля 2020

Когда я звоню @Ajax.ActionLink в моем .vb html виде, используя htmlAttributes:

    @Ajax.ActionLink("LinkText", 
                     "Action",
                     routeValues:=baseController.PathParams(New With {.id = Model.Icodciud}), 
                     ajaxOptions:=New AjaxOptions() With {.HttpMethod = "POST", .UpdateTargetId = "myPanel", .InsertionMode = InsertionMode.InsertBefore},
                     htmlAttributes:=New With {.class = "btn btn-primary"})

Результат на странице такой:

<a class="btn btn-primary" data-ajax="true" data-ajax-method="POST" data-ajax-mode="before" data-ajax-update="#myPanel" 
href="/Controller/Action?Count=2&amp;Keys=System.Collections.Generic.Dictionary%602%2BKeyCollection%5BSystem.String%2CSystem.Object%5D&amp;Values=System.Collections.Generic.Dictionary%602%2BValueCollection%5BSystem.String%2CSystem.Object%5D">LinkText</a>

Но если я удаляю параметр htmlAttributes:

@Ajax.ActionLink("LinkText", 
                 "Action",
                 routeValues:=baseController.PathParams(New With {.id = Model.Id}), 
                 ajaxOptions:=New AjaxOptions() With {.HttpMethod = "POST", .UpdateTargetId = "myPanel", .InsertionMode = InsertionMode.InsertBefore})

Тогда результат будет таким (он хорошо работает):

<a data-ajax="true" data-ajax-method="POST" data-ajax-mode="before" data-ajax-update="#myPanel" 
href="/Controller/Action?Id=1&Other=Params">LinkText</a>

Метод baseController.PathParams всегда возвращает RouteValueDictionary:

    Public Function PathParams(Optional params As Object = Nothing) As RouteValueDictionary

        Dim dictionary As IDictionary(Of String, Object) = New Dictionary(Of String, Object)()

     ... some code ...

        Return New RouteValueDictionary(dictionary)

    End Function

Так что это не может быть проблемой. Проблема в том, когда я использую htmlAttributes или нет.

Есть идеи?

1 Ответ

0 голосов
/ 02 апреля 2020

Я обнаружил проблему. Если вы хотите, чтобы вы использовали метод ActionLink с routeValues в качестве RouteValueDictionary, тогда htmlAttributes должно быть IDictionary:

Public Shared Function ActionLink(ajaxHelper As AjaxHelper, linkText As String, actionName As String, routeValues As Object, ajaxOptions As AjaxOptions, htmlAttributes As Object) As MvcHtmlString

Public Shared Function ActionLink(ajaxHelper As AjaxHelper, linkText As String, actionName As String, routeValues As RouteValueDictionary, ajaxOptions As AjaxOptions, htmlAttributes As IDictionary(Of String, Object)) As MvcHtmlString
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...