私はでRazorビューエンジンをサポートしています(これはWebMatrixまたはASP.NET MVCにも当てはまると思いますが)@helper構文を使って、宣言的なRazor Helpersを書いています。彼らはすべて正常に動作します。しかし、私はそれらをより柔軟にして、出力の回りに「折り返す」HTMLフラグメントを渡すことができるようにしたいと思います。HTMLフラグメント(デリゲートとして)を宣言型Razorヘルパーに渡すにはどうすればよいですか?
@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>
が生成されます。たとえば、私はいくつかのパラメータからHTMLリンクを生成することができヘルパー(ずっとここでは単純化)を持っています。私は、必要に応じてとても長い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>)
とまったく出力を取得していないの取得:私は基本的にこのような何かをできるようにしたいと思います。
Templated Razor DelegatesについてのPhil Haackedのブログを読んでいますが、実際には可能であれば、このコンテキストでどのように使用できるのか分かりません。私は何かが欠けているか、間違った木を吠えているような気分になります。
あなたは私の初めてのSO投稿にお答えしましたので、本当にお手伝いしたいと思います。悲しいことに、私はまだMS-MVCに手を付けていませんし、Razorでさえも少なくしています。ご多幸を祈る! – mikemanne