我正在阅读关于剃刀模板委托的这篇优秀文章。 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
razor解析出来的保留关键字吗?它可以用于任何其他惯例吗?说@column
或@row
或其他任何方式?
非常感谢。就像我说的,我更感兴趣的是razor视图引擎如何将模板语句转换为后台的实际代码。
[编辑]。感谢布拉德指出安德鲁的文章。所以上述陈述“@<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”的问题是..suppose“item”是“Proudct”类型那么剃刀正在尝试做什么?
首先,razor解析用逗号“。”分隔的“@ item.ProductName”,得到“item”和“ProductName”。
然后由于“动态”参数,在后台,.NET会尝试查找“Product”项的属性“ProductName”的值?
由于
答案 0 :(得分:0)
没关系。我不知道为什么我没有建立连接。
我问了关于DynamicObject DynamicObject? How does the following code work?的另一个问题,@ Alxandr解释了这个关于&#34; dynamic&#34;。基本上,它变成了
dynamic item = new Product(...);
String ProductName = item.ProductName;
所以从本质上讲,&#34;动态&#34;后台参数使用CSharpGetMemberBinder并通过反射,找出&#34; ProductName&#34;对象&#34;产品&#34;。
razor模板设计非常精彩