【问题标题】:ASP.NET MVC - Ajax.ActionLink with a HtmlStringASP.NET MVC - 带有 HtmlString 的 Ajax.ActionLink
【发布时间】:2012-02-08 14:06:23
【问题描述】:

是否可以使用带有 HtmlString 而不是字符串的 Ajax.ActionLink 方法作为链接文本?

这样做的原因是我想做这样的事情:

@Ajax.ActionLink("<span style='highlight'>Hello</span> World", ...)

如果我现在尝试这个,它会在我的页面上返回 span 等。所以我需要将它作为 HtmlString 返回

编辑:

刚试过:

        public static MvcHtmlString ActionLink(
        this AjaxHelper ajaxHelper,
        IHtmlString linkText,
        string actionName,
        Object routeValues,
        AjaxOptions ajaxOptions
    )
    {
        return ActionLink(ajaxHelper, linkText, actionName, routeValues, ajaxOptions);
    }

我遇到了堆栈溢出异常?

【问题讨论】:

  • 我认为不可能。您将不得不做一些额外的工作来仅提取操作链接所需的文本。

标签: asp.net-mvc-3


【解决方案1】:

【讨论】:

    【解决方案2】:

    不,我不这么认为。 ASP.NET MVC 将对文本进行 HTML 编码,使其显示为这样。您需要使用的是AjaxExtensions.ActionLink() 方法的重载。这样的事情会起作用:

    AjaxExtenions.ActionLink()

    方法参数列表:

    public static MvcHtmlString ActionLink(
        this AjaxHelper ajaxHelper,
        string linkText,
        string actionName,
        Object routeValues,
        AjaxOptions ajaxOptions,
        Object htmlAttributes
    )
    

    注意有一个Object 表单HTML 属性。 但是,这仅适用于该锚元素的 HTML 属性。如果您真的决定使用&lt;span /&gt; 元素,那么最好的办法是为此编写一个自定义HtmlHelper

    示例

    @Ajax.ActionLink(
        "This is your link text",
        "SomeActionName",
        null, // or you could pass route values if you like
        new AjaxOptions() { }, // whatever Ajax options you want
        null); // not passing any html attributers
    

    【讨论】:

    • 我不能将 linkText 设置为 IHtmlString 数据类型并返回我的新 ActionLink 吗?
    • @BiffBaffBoff 我不这么认为。我相信在 ActionLink() 方法中,字符串是 HTML 编码的。因此,无论您传递给它什么字符串,您都将获得相同的最终结果。
    • 我刚试了一下,它返回了一个堆栈溢出异常,似乎它引用了自己......
    • @BiffBaffBoff 您不能将AjaxHelper 对象传递给它。这就是扩展方法的制作方式。在我编辑的帖子中查看我的示例。
    猜你喜欢
    • 1970-01-01
    • 2012-01-21
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多