TagBuilder.MergeAttributes不起作用

rid*_*nsb 6 html c# asp.net-mvc tagbuilder

我在MVC中创建自己的帮助器.但HTML中未添加自定义属性:

帮手

public static MvcHtmlString MenuItem(this HtmlHelper helper, string linkText, string actionName, string controllerName, object htmlAttributes)
{
    var currentControllerName = (string)helper.ViewContext.RouteData.Values["controller"];
    var currentActionName = (string)helper.ViewContext.RouteData.Values["action"];

    var builder = new TagBuilder("li");

    if (currentControllerName.Equals(controllerName, StringComparison.CurrentCultureIgnoreCase)
        && currentActionName.Equals(actionName, StringComparison.CurrentCultureIgnoreCase))
        builder.AddCssClass("selected");

    if (htmlAttributes != null)
    {
        var attributes = new RouteValueDictionary(htmlAttributes);
        builder.MergeAttributes(attributes, false); //DONT WORK!!!
    }

    builder.InnerHtml = helper.ActionLink(linkText, actionName, controllerName).ToHtmlString();
    return MvcHtmlString.Create(builder.ToString(TagRenderMode.Normal));
}
Run Code Online (Sandbox Code Playgroud)

CSHTML

@Html.MenuItem("nossa igreja2", "Index", "Home", new { @class = "gradient-top" })
Run Code Online (Sandbox Code Playgroud)

最终结果(HTML)

<li class="selected"><a href="/">nossa igreja2</a></li>
Run Code Online (Sandbox Code Playgroud)

请注意,它没有添加gradient-top我在helper调用中提到的类.

A B*_*nch 18

MergeAttributes使用replaceExistingset to 调用时false,它只会添加属性字典中当前不存在的属性.它不会合并/连接各个属性的值.

我相信你的号召

builder.AddCssClass("selected");
Run Code Online (Sandbox Code Playgroud)

builder.MergeAttributes(attributes, false);
Run Code Online (Sandbox Code Playgroud)

将解决您的问题.