繁体   English   中英

如何为Html.ActionLink(MVC3)合并htmlAttributes?

[英]How to merge htmlAttributes for Html.ActionLink (MVC3)?

我将编写一个包装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"

如何合并这些htmlAttributes?

试试这个片段

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM