asp.net-mvc - MVC Html Helper 不渲染链接内的图像

标签 asp.net-mvc html-helper

我正在创建一个自定义助手来创建图像链接,如下所示:

    public static MvcHtmlString ImageLink(this HtmlHelper helper, string imageUrl, string imageAlt, string linkUrl, string linkTitle, string linkTarget)
{
    //create the image object
    var img = new TagBuilder("img");

    //add its attributes
    img.MergeAttribute("src", imageUrl);
    img.MergeAttribute("alt", imageAlt);

    //create the link
    var link = new TagBuilder("a");

    //add its attributes
    link.MergeAttribute("href", linkUrl);
    link.MergeAttribute("title", linkTitle);
    link.MergeAttribute("target", linkTarget);

    //set the inner html of the link to that of the img
    link.InnerHtml = img.ToString();

    //finally return the link tag
    return MvcHtmlString.Create(link.ToString(TagRenderMode.EndTag));
}

但是,当我使用它时,它根本不渲染任何内容。 当我将最后一行更改为:

return MvcHtmlString.Create(link.ToString(TagRenderMode.SelfClosing));

它只渲染 a 标签并封装语句之外的文本,例如:

Hello @Html.ImageLink("...params") world

这里的结果是“世界”文本被包裹在 anchor 中,但没有图像。我什至没有意识到它可以做到这一点,因为“世界”一词不是辅助语句的一部分。

我最终将最终声明更改为:

return MvcHtmlString.Create(link.ToString(TagRenderMode.Normal));

这有效,但我的问题是为什么?我认为 EndTag 更有意义,尤其是在查看 Intellisense 对该选项给出的描述时。

最佳答案

代码的最后两行应该是:

        link.InnerHtml = img.ToString(TagRenderMode.SelfClosing);

        return MvcHtmlString.Create(link.ToString());

您不需要 TagRenderMode.Normal,因为它是默认模式。要在您的 View 中使用它,您可以这样做:

@Html.ImageLink("/images/test.jpg", "testalt", "http://testlink", "linktitle", "linktarget")

I thought EndTag made more sense

您可能会这么认为,但 TagRenderMode.EndTag 仅呈现结束标记。 TagRenderMode.Normal 就是您所追求的,因为它创建了一个普通的 HTML 标记并允许 InnerHtml

关于asp.net-mvc - MVC Html Helper 不渲染链接内的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11447908/

相关文章:

c# - 如何在运行时填写资源字符串?

asp.net-mvc-3 - 模仿 BeginForm() 语法

c# - 在哪里放置我的自定义 Html Helpers?

c# - Html.CheckBoxFor 类型转换错误

asp.net-mvc - 使用 Html.Routelink 链接文本的 ViewBag 属性

asp.net-mvc - Asp.Net MVC 帮助程序 : create a global helper for loading view with or without layout

asp.net-mvc - 如何在单个 Microsoft ASP.NET MVC Web 应用程序中支持个人用户帐户和工作或学校帐户?

c# - ASP.NET MVC - 编辑和只读的单一 View ?

javascript - 使用 SignalR 通知当前调用者

.net - 强制 ActionLinks 呈现为小写