私は、Razor ビュー エンジンをサポートするようになったUmbraco 4.7で使用する宣言型のRazor ヘルパー(@helper 構文を使用) をいくつか作成してきました(ただし、これは WebMatrix または ASP.NET MVC にも同様に適用されると思います)。それらはすべて正常に機能します。ただし、出力を「ラップ」できるHTMLフラグメントを渡すことができるように、もう少し柔軟にしたいと思います(ただし、出力がある場合のみ)。たとえば、いくつかのパラメーターから HTML リンクを生成できるヘルパー (ここではかなり簡略化されています) があります。
@helper HtmlLink(string url, string text = null, string title = null,
string cssClass = null, bool newWindow = false)
{
if (!String.IsNullOrEmpty(url))
{
System.Web.Mvc.TagBuilder linkTag = new System.Web.Mvc.TagBuilder("a");
linkTag.Attributes.Add("href", url);
linkTag.SetInnerText(text ?? url);
if (!String.IsNullOrEmpty(title))
{
linkTag.Attributes.Add("title", title);
}
if (!String.IsNullOrEmpty(cssClass))
{
linkTag.Attributes.Add("class", cssClass);
}
if (newWindow)
{
linkTag.Attributes.Add("rel", "external");
}
@Html.Raw(linkTag.ToString())
}
}
を呼び出す@LinkHelper.HtmlLink("http://www.google.com/", "Google")
と、HTML 出力が生成されます<a href="http://www.google.com/">Google</a>
。
ただし、URL に値がある限り、生成されたハイパーリンク HTML にラップされる HTML フラグメントをオプションで渡すことができれば、すばらしいことです。私は基本的にこのようなことをしたいと思います:
@LinkHelper.HtmlLink("http://www.google.com/", "Google", @<li>@link</li>)
そして出力を得る
<li><a href="http://www.google.com/">Google</a></li>
また@LinkHelper.HtmlLink("", "", @<li>@link</li>)
出力がまったく得られません。
テンプレート化された Razor Delegatesに関する Phil Haacked のブログを読みましたが、このコンテキストでそれらをどのように使用できるかについてのコツをつかむことができません。何かを見逃しているか、間違った木を吠えているような気がします。