Как объединить htmlAttributes для Html.ActionLink (MVC3)? - PullRequest
4 голосов
/ 07 сентября 2011

Я собираюсь написать простой помощник, который оборачивает Html.ActionLink и добавляет к нему определенный атрибут класса. На данный момент это выглядит так:

@helper MyActionLink(string text, string action, object routeValues, object htmlAttributes)
    {
    @Html.ActionLink(text, action, routeValues, new { @class = "MyClass" })
}

На самом деле он добавляет необходимый атрибут @class, но игнорирует все переданные htmlAttributes. Итак, если используется как

@MyActionLink("Item1", "Edit", new { itemId = 1 }, new { @class = "class1" })

выводит

<a class="MyClass" href="/Test/Edit?itemId=1">Item1</a>

но я хочу, чтобы у него было 2 класса: class="class1 MyClass"

Как я могу объединить эти атрибуты html?

Ответы [ 3 ]

8 голосов
/ 07 сентября 2011

Попробуйте этот фрагмент

@helper MyActionLink(string text, string action, object routeValues, object htmlAttributes)
{
    var attributes = (IDictionary<string, object>) HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
    object cssClass;
    if(attributes.TryGetValue("class", out cssClass) == false)
    {
        cssClass = "";
    }
    attributes["class"] = cssClass + " MyClass";

    @Html.ActionLink(text, action, new RouteValueDictionary(routeValues), attributes)
}
1 голос
/ 27 мая 2013

Это может быть достигнуто простым добавлением тега в jquery скрипт, как это,

$("#linkID").html("<span class='ui-icon ui-icon-gear'/>"+$("#linkID").html());
0 голосов
/ 02 мая 2015

Немного проще, чем ответ Хаззика:

@helper MyActionLink(string text, string action, object routeValues, object htmlAttributes)
{
    var htmlAttr = HtmlHelper.AnonymousObjectToHtmlAttributes(this.ViewData["htmlAttributes"]);

    htmlAttr["class"] = ("MyClass " + htmlAttr["class"]).Trim();

    @Html.ActionLink(text, action, new RouteValueDictionary(routeValues), htmlAttr)
}
...