HtmlHelper рендеринг словаря «ключи» и «значения» в качестве атрибутов

Если вы считаете, что вам нужна дополнительная информация, я ранее опубликовал и принял это. Правильное создание расширения ActionLink с помощью htmlAttributes

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


Это происходит, когда я вызываю ActionImageLink2. Целью ActionImageLink2 является только добавление пар атрибутов. Как я могу сделать так, чтобы ключи и значения отображались правильно?

Что-то не так с HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)

Вот мои методы расширения

public static MvcHtmlString ActionImageLink(this HtmlHelper helper, string imageUrl, string altText, RouteValueDictionary routeValues, string _imageClass = "", object htmlAttributes = null)
        {

            var image = new TagBuilder("img");
            image.MergeAttribute("src", imageUrl);
            image.MergeAttribute("alt", altText);
            if (string.IsNullOrEmpty(_imageClass) == false) image.MergeAttribute("class", _imageClass);
            var link = helper.ActionLink("[replaceme]", routeValues, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));

            return new MvcHtmlString(link.ToHtmlString().Replace("[replaceme]", image.ToString(TagRenderMode.SelfClosing)));
        }

        public static MvcHtmlString ActionImageLink2(this HtmlHelper helper, string imageUrl, string altText, RouteValueDictionary routeValues, string updateTarget, string _imageClass = "", object htmlAttributes = null)
        {
            RouteValueDictionary htmlAttr = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
            htmlAttr.Add("data-ajaxget-click", "");
            htmlAttr.Add("data-ajax-update", (updateTarget.Contains("#") ? updateTarget : "#" + updateTarget));

            return helper.ActionImageLink(imageUrl, altText, routeValues, _imageClass, htmlAttr);
        }
        public static MvcHtmlString ActionLink(this HtmlHelper helper, string linkText, RouteValueDictionary routeValues, object htmlAttributes = null)
        {
            return helper.ActionLink(linkText, routeValues["Action"].ToString(), routeValues["Controller"].ToString(), routeValues, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
        }
    }

Вот мой тестовый вид

Каждый ActionLink имеет вторую строку, которая печатается как ToHtmlString. На принтскрине ниже показан результат.

@{RouteValueDictionary route = new RouteValueDictionary();
            route["Area"] = "";
            route["Controller"] = "Test";
            route["Action"] = "Test";
}

@Html.ActionLink("Html.ActionLink", route, new { style = "color: green" })

@Html.ActionLink("Html.ActionLink", route, new { style = "color: green" }).ToHtmlString()

@Html.ActionImageLink("https://stackoverflow.com/users/flair/511438.png", "alt text", route, "image class", new { style = "background-color: orange" })
@Html.ActionImageLink("https://stackoverflow.com/users/flair/511438.png", "alt text", route, "image class", new { style = "background-color: orange" }).ToHtmlString()

@Html.ActionImageLink2("https://stackoverflow.com/users/flair/511438.png", "alt text", route, "partialDiv", "image class", new { style = "background-color: orange" })
@Html.ActionImageLink2("https://stackoverflow.com/users/flair/511438.png", "alt text", route, "partialDiv", "image class", new { style = "background-color: orange" }).ToHtmlString()

enter image description here

6
задан Community 23 May 2017 в 12:13
поделиться