如何为Html合并Html属性.ActionLink (MVC3)

本文关键字:Html MVC3 ActionLink 合并 属性 | 更新日期: 2023-09-27 18:08:02

我将编写一个简单的帮助器来包装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>

但是我想让它有两个类:class="class1 MyClass"

如何合并这些html属性?

如何为Html合并Html属性.ActionLink (MVC3)

试试这个片段

@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)
}

这可以简单地在jquery脚本中添加标签,就像这样,

$("#linkID").html("<span class='ui-icon ui-icon-gear'/>"+$("#linkID").html());

比hazzik的答案简单一点:

@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)
}