MVC Razor语法:@后跟HTML

MVC Razor语法:@后跟HTML,html,asp.net-mvc,razor,Html,Asp.net Mvc,Razor,我今天遇到了这段代码,但并不真正理解它。有人能告诉我这是什么意思,怎么解释吗?我简化了它,但它基本上是@符号,后跟一些HTML 电话是: @Html.Tmpl(@<p>text to display</p>) @Html.Tmpl(@要显示的文本) 功能是: public static HelperResult Tmpl<TModel>( this HtmlHelper<TModel> html, Func<HtmlHelper<T

我今天遇到了这段代码,但并不真正理解它。有人能告诉我这是什么意思,怎么解释吗?我简化了它,但它基本上是@符号,后跟一些HTML

电话是:

@Html.Tmpl(@<p>text to display</p>)
@Html.Tmpl(@要显示的文本

功能是:

public static HelperResult Tmpl<TModel>( this HtmlHelper<TModel> html, Func<HtmlHelper<TModel>, HelperResult> template )
{
    return new HelperResult( writer => template( html ).WriteTo( writer ) );
}
publicstatichelperresult Tmpl(此HTMLHelperHTML,Func模板)
{
返回新的HelperResult(writer=>template(html).WriteTo(writer));
}

请开导我。谢谢。

这是一个模板剃须刀代理的示例。很简单,它是一种HTML帮助程序,它接受一块Razor模板代码,可用于合成复杂操作的结果

一个简单的用例可能是
Html.List(data,template)
方法,它接受记录列表和每行数据的模板。模板标记是一个委托,可以在助手的逻辑中调用和传递模型

public static HelperResult List<T>(this IEnumerable<T> items, 
  Func<T, HelperResult> template) {
    return new HelperResult(writer => {
        foreach (var item in items) {
            template(item).WriteTo(writer);
        }
    });
}
publicstatichelperresult列表,
Func(模板){
返回新的HelperResult(writer=>{
foreach(项目中的var项目){
模板(项目).WriteTo(编写器);
}
});
}

Phil Haacked在这里进行了更详细的介绍:.

就在我开始理解函数式编程的时候:)我会研究这个问题,直到我得到它,但现在我需要知道如何将要显示的@文本传递到局部视图中,以便在局部视图中调用@Html.Tmpl。再次感谢。对于任何感兴趣的人,我之前评论的答案是将部分模型设为HelperResult,并在视图中使用@Html.Partial(“\u ThePartial”,Html.Tmpl(@要显示的文本)