Есть ли конфликт между 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
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)
}
)
) %>
или же
<%=Html.ActionLink(
SharedResources.Shared_Pagination_First,
Model.ActionToExecute,
Model.ControllerToExecute,
Model.FirstRouteValues,
new Dictionary<string, object> { { "title", somevalue } })%>
Там нет перегрузки, которая соответствует вашим параметрам, вы должны либо использовать object
для маршрута и HTML или RouteValueDictinary
а также IDictionary<string,object>
,
Вот так:
Html.ActionLink(SharedResources.Shared_Pagination_First, Model.ActionToExecute, Model.ControllerToExecute, Model.FirstRouteValues, new Dictionary<string.object> { { "title", somevalue } })