1

我一直在查看 Telerik MVC 扩展的源代码,但我一生都无法弄清楚模板列是如何工作的。我可以它们正常工作,但我试图了解幕后发生的事情,因为我认为它们真的很有用。我已经浏览了源代码,但我仍然有点困惑。这是源代码示例项目中的一个示例。

  Html.Telerik().Grid(Model)
    .Name("Grid")
    .Columns(columns =>
    {
        columns.Template(c => { 
            %><img 
                alt="<%= c.CustomerID %>" 
                src="<%= Url.Content("~/Content/Grid/Customers/" + c.CustomerID + ".jpg") %>" 
              /><% 
        }).Title("Picture");
        columns.Bound(c => c.ContactName).Title("Name");
        columns.Bound(c => c.Phone);
    })
    .Sortable()
    .Scrollable(scrolling => scrolling.Height(250))
    .Pageable()
    .Render();

columns => {} 委托的类型Action<GridColumnFactory<T>> 是 Model IEnumerable<T>,而 c=>{} 委托的类型是Action<TModel>。我明白了,GridColumnFactory 上的 Template 方法被赋予了一个动作作为参数。

此操作如何用于呈现所需的 HTML?

谢谢 !!!

4

1 回答 1

3

这里的神奇之处在于 Telerik 使用了这样一个事实,即 ASP.NET 网页中的任何内容(HTML、JavaScript 等)实际上Response.Write都被页面编译器转换为类似的调用。

例如;

<% Action action = () => { %><h1>Title</h1><% }; %>

将被翻译成类似这样的 C# 代码:

Action action = () => { Response.Write("<h1>Title</h1>"); };

一旦你理解了这一点,它与其他方法没有什么不同:对于每个单元格,Telerik 只是简单地调用你编写的,而没有意识到它,其中包含编译器生成的Action一个或多个调用。Write

于 2012-11-27T13:52:53.700 回答