Есть ли конфликт между RouteValueDictionary и htmlAttributes?

Я использую RouteValueDictionary для передачи RouteValues ​​в ActionLink:

Если я кодирую:

<%:Html.ActionLink(SharedResources.Shared_Pagination_First, Model.ActionToExecute, Model.ControllerToExecute, Model.FirstRouteValues, null)%>

Результат ссылки ОК:

SearchArticles?refSearch=2&exact=False&manufacturerId=5&modelId=3485&engineId=-1&vehicleTypeId=5313&familyId=100032&page=0

Но если я кодирую:

<%: Html.ActionLink(SharedResources.Shared_Pagination_First, Model.ActionToExecute, Model.ControllerToExecute, Model.FirstRouteValues, new { @title = string.Format(SharedResources.Shared_Pagination_LinkTitle, 0) })%>

Результат ссылки:

SearchArticles?Count=10&Keys=System.Collections.Generic.Dictionary%602%2BKeyCollection%5BSystem.String%2CSystem.Object%5D&Values=System.Collections.Generic.Dictionary%602%2BValueCollection%5BSystem.String%2CSystem.Object%5D

В чем проблема? Единственная разница в том, что в последнем я использую htmlAttributes.


person Pedre    schedule 27.07.2012    source источник


Ответы (2)


Вы используете неправильную перегрузку помощника ActionLink. Нет перегрузки, которая принимает routeValues как RouteValueDictionary и htmlAttributes как анонимный объект. Итак, если Model.FirstRouteValues - это RouteValueDictionary, то последний аргумент также должен быть RouteValueDictionary или простым IDictionary<string,object>, а не анонимным объектом. Просто так:

<%= Html.ActionLink(
    SharedResources.Shared_Pagination_First, 
    Model.ActionToExecute, 
    Model.ControllerToExecute, 
    Model.FirstRouteValues, 
    new RouteValueDictionary(
        new { 
            title = string.Format(SharedResources.Shared_Pagination_LinkTitle, 0) 
        }
    )
) %>

or

<%=Html.ActionLink(
SharedResources.Shared_Pagination_First, 
Model.ActionToExecute, 
Model.ControllerToExecute, 
Model.FirstRouteValues, 
new Dictionary<string, object> { { "title", somevalue  } })%>
person Darin Dimitrov    schedule 27.07.2012

Нет перегрузки, соответствующей вашим параметрам, вы должны либо использовать object для маршрута и html, либо RouteValueDictinary и IDictionary<string,object>.

Вот так:

Html.ActionLink(SharedResources.Shared_Pagination_First, Model.ActionToExecute, Model.ControllerToExecute, Model.FirstRouteValues, new Dictionary<string.object> { { "title", somevalue  } })
person Steen Tøttrup    schedule 27.07.2012