Ошибка преобразования анонимного (htmlAttributes) в IDictionary в настраиваемом помощнике - PullRequest
3 голосов
/ 18 июня 2010

Я пытаюсь использовать пользовательский помощник, который создает ссылку, используя пример, найденный на Существует ли ASP.NET MVC HtmlHelper для ссылок на изображения?

Исходя из предположения, что этот код действительно функционирует, я не уверен, в чем проблема. Я новичок в анонимных типах и MVC, поэтому я предполагаю, что упускаю что-то явно очевидное.

Мой код выглядит так:

        public static string ImageLink(this HtmlHelper htmlHelper, string imgSrc, string alt, string actionName, string controllerName, object imgHtmlAttributes)
    {
        UrlHelper urlHelper = ((Controller)htmlHelper.ViewContext.Controller).Url;
        TagBuilder imgTag = new TagBuilder("img");
        imgTag.MergeAttribute("src", imgSrc);
        imgTag.MergeAttributes((IDictionary<string, string>)imgHtmlAttributes, true);
        string url = urlHelper.Action(actionName, controllerName);

        TagBuilder imglink = new TagBuilder("a");
        imglink.MergeAttribute("href", url);
        imglink.InnerHtml = imgTag.ToString();

        return imglink.ToString();
    }

Код вида:

<%= Html.ImageLink("../../imgs/details_icon", "View details", "Details", "Tanque", new { height = "5", width = "5" }) %>

И исключение:

Unable to cast object of type '<>f__AnonymousType0`2[System.String,System.String]' to type 'System.Collections.Generic.IDictionary`2[System.String,System.String]'.

1 Ответ

8 голосов
/ 18 июня 2010

Внутренне MVC использует RouteValueDictionary для приведения объекта в словарь, поэтому просто измените

imgTag.MergeAttributes((IDictionary<string, string>)imgHtmlAttributes, true);

до

imgTag.MergeAttributes(new RouteValueDictionary(imgHtmlAttributes), true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...