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