我正在创建一个自定义助手来创建图像链接,如下所示:
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
这里的结果是“世界”文本被包裹在锚点中,但没有图像。我什至没有意识到它可以做到这一点,因为“世界”这个词不是辅助语句的一部分。
我终于把最后的声明改成了:
return MvcHtmlString.Create(link.ToString(TagRenderMode.Normal));
这行得通,但我的问题是为什么?我认为 EndTag 更有意义,尤其是在查看 Intellisense 对该选项的描述时。