将html属性传递给Html.Actionlink帮助函数

时间:2013-11-05 11:59:09

标签: asp.net-mvc asp.net-mvc-4

我想知道如何将html属性传递给@Html.ActionLink辅助函数

我想这样做

<a class="accordion-toggle" data-toggle="collapse" data-parent="#leftMenu" href="/Admin/UserManagment">
                    <i class="icon-user"></i>User Managment
                </a>

如何传递italic html属性

2 个答案:

答案 0 :(得分:6)

您可以使用@Url.Action()替代。

在这种情况下,您的代码将如下所示:

<a class="accordion-toggle" data-toggle="collapse" data-parent="#leftMenu" 
    href="@Url.Action("UserManagment", "Admin")">
        <i class="icon-user"></i>User Managment
</a>

修改

出于兴趣,我做了一些研究,发现了this answer。这解释了为此目的无法使用Html.ActionLink

  

Html.ActionLink帮助程序HTML对阻止的链接文本进行编码   您可以在链接文本中嵌入HTML。

答案 1 :(得分:2)

无法使用@Html.ActionLink

将html代码包装在锚标记内

您可以使用@Url.Action

<a href="@Url.Action("UserManagment", "Admin")" ...>
    <i class="icon-user"></i>User Managment
</a>

或创建扩展方法:

public static IHtmlString MyActionLink(this HtmlHelper helper,
                                            string value, 
                                            Dictionary<string, string> attributes,
                                            string innerHtml)
{
    var aBuilder = new TagBuilder("a");
    foreach (var attr in attributes)
    {
        aBuilder.MergeAttribute(attr.Key, attr.Value);
    }
    aBuilder.InnerHtml += innerHtml + value;

    return new HtmlString(aBuilder.ToString(TagRenderMode.Normal));
}

并在您的观看中使用它

@{
    var attributes = new Dictionary<string, string>
        {
          { "data-toggle", "collapse" },
          { "data-parent", "#leftMenu" },
          { "href", Url.Action("UserManagement", "Admin") }
        };
    var innerHtml = "<i class='icon-user'></i>";
}

@Html.MyActionLink("User Managment", attributes, innerHtml)