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

发布于 2024-12-03 07:35:30 字数 642 浏览 1 评论 0原文

我将编写一个简单的帮助程序,它包装 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?

I'm going to write a simple helper that wraps Html.ActionLink and adds a certain class attribute to it.
At the moment it looks like:

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

It actually adds needed @class attribute, but ignores all the passed htmlAttributes. So, if being used like

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

it outputs

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

but I want it to have 2 classes: class="class1 MyClass"

How can I merge those htmlAttributes?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

于我来说 2024-12-10 07:35:30

试试这个片段

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

Try this snippet

@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)
}
孤千羽 2024-12-10 07:35:30

这可以通过简单地在 jquery 脚本中附加标签来实现,如下所示,

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

This can be achieved simply appending tag in jquery script like this,

$("#linkID").html("<span class='ui-icon ui-icon-gear'/>"+$("#linkID").html());
反话 2024-12-10 07:35:30

比哈齐克的答案简单一点:

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

A bit simpler than hazzik's answer:

@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)
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文