2
我创建一个自定义的辅助函数来建立图片链接的范围内:MVC的HTML帮助不会呈现图像的链接
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));
只呈现一个标签和封装文本只是超出例如以下语句:
Hello @Html.ImageLink("...params") world
这里的结果是,“世界”的文字被包裹在锚中,但没有图像。我甚至没有意识到它可以做到这一点,因为'世界'这个词不是帮助者声明的一部分。
我终于改变了最终声明:
return MvcHtmlString.Create(link.ToString(TagRenderMode.Normal));
这个工作,但我的问题是为什么呢?我认为EndTag更有意义,尤其是在查看Intellisense为该选项提供的描述时。
谢谢你。 – Jacques 2012-07-13 09:11:21
一个问题。当你渲染链接标签时,你应该使用TagRenderMode.EndTag,因为你希望链接有一个明确的结尾? – Jacques 2012-07-13 09:12:16
我可以看到你的意思,但tagbuilder的默认行为是创建一个带有开放标签和结束标签的html标签。明确地看到模式结束标签会迫使它只创建结束标签。当你想要在你的代码中创建一大块html时,它会很有用,然后在最后指定一个结束标记。希望这是有道理的 – jzm 2012-07-14 02:25:14