суббота, 28 ноября 2015 г.

ASP.Net MVC Html.ActionLink проблемы при передаче routeValues как переменной

Ситуация

Во View была строка

@Html.ActionLink("Заказать", "add", "order",
new {id=Model.Id, feedbackid=Model.FeedbackId},
      new {rel="nofollow"})


т.к. набор параметров был опциональный - захотелось их вынести в отдельную переменную

код стал таким
@{
var addOrderLinkRouteValues = new RouteValueDictionary();
addOrderLinkRouteValues.Add("Id", Model.Id);
// опциональное добавление других параметров
}
...
@Html.ActionLink("Заказать", "add", "order",
        addOrderLinkRouteValues,
      new {rel="nofollow"})

Проблема

испортилась ссылка. вместо набора параметров в ссылке на выходе стало отображаться название типа 

/order/add?Count=1&Keys=System.Collections.Generic.Dictionary%602%2BKeyCollection%5BSystem.String%2CSystem.Object%5D&Values=System.Collections.Generic.Dictionary%602%2BValueCollection%5BSystem.String%2CSystem.Object%5D

Решение

Если в двух словах. при таком использовании система подхватывает не тот перегруженный метод

подхватывается такой 
ActionLink(HtmlHelper, String, String, String, Object, Object)
а нам нужен быть такой
ActionLink(HtmlHelper, String, String, RouteValueDictionary, IDictionary<String, Object>)

соответственно код нужно заменить на такой 

@Html.ActionLink("Заказать", "add", "order",
addOrderLinkRouteValues,
        new Dictionary<string, object>{
        {"rel","nofollow"}
            }
        )
тут последний параметр задан типом Dictionary (реализующим IDictionary) а не объектом

Комментариев нет:

Отправить комментарий