我正在阅读这篇关于 razor 模板委托的优秀文章。http://www.prideparrot.com/blog/archive/2012/9/simplifying_html_generation_using_razor_templates
虽然我了解它的使用方式,如
Func<dynamic, HelperResult> variable = @<var>@item.ProductName</var>
我的问题是,剃须刀引擎究竟是如何@<var>@item.ProductName</var>
在后台将“”翻译成代表的?如在
Func<dynamic, HelperResult> variable = delegate(dynamic x)
{
(what goes on in here?)
}
是@item
剃刀解析出来的保留关键字吗?可以在任何其他约定中使用吗?说@column
或@row
或任何其他方式?
非常感谢。就像我说的,我对 razor 视图引擎如何在后台将模板语句转换为实际代码更感兴趣。
[编辑]。感谢 Brad 指出 Andrew 的文章。所以上面的陈述“ @<var>@item</var>
”将转化为
Func<dynamic, HelperResult> variable = delegate(dynamic item)
{
return new Microsoft.WebPages.Helpers.HelperResult(__writer => {
@__writer.Write(" ");
@__writer.Write("<var>");
@__writer.Write(item.ProductName); <--- what's happening here?
@__writer.Write("</var>");
}
所以我看到 razor 自动解析出@<var>
并</var>
分成单独的字符串等,我关于“item.ProductName”的问题是..假设“item”是“Proudct”类型,那么下面是 razor 想要做什么?
首先,razor 解析用逗号“.”分隔的“@item.ProductName”,得到“item”和“ProductName”。
那么由于“动态”参数,.NET会在后台尝试查找“Product”项的“ProductName”属性值吗?
谢谢