次のように、画像リンクを作成するカスタム ヘルパーを作成しています。
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 によって与えられた説明を見ると、特に意味があると思いました。