我一直在编写一些声明式
Razor Helpers(使用@helper语法)与
Umbraco 4.7一起使用,它现在支持Razor视图引擎(尽管我认为这同样适用于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取代. 但是,如果我可以选择传入一个HTML片段,只要URL有值,那么它就会包含在生成的超链接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>)
根本没有输出.
我在Phil Haacked的博客中读到了关于Templated Razor Delegates的内容,但是在这种情况下无法理解它们是如何使用的 – 如果确实有可能的话.我感觉到我错过了什么或者吠叫了错误的树.
最佳答案 我认为问题出在@link上.模板化的剃刀代表使用’magic’参数@item获取数据.尝试在模板中用@item替换@link.
另外,发布执行模板的代码 – 您的HtmlLink方法,它采用Func< dynamic,object>.