【问题标题】:How does Telerik MVC extensions render template columnsTelerik MVC 扩展如何呈现模板列
【发布时间】:2012-11-27 11:45:55
【问题描述】:

我一直在查看 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();

列 => {} 委托的类型为 Action&lt;GridColumnFactory&lt;T&gt;&gt; 其中 Model 是 IEnumerable&lt;T&gt; 并且 c=>{} 委托的类型是 Action&lt;TModel&gt; 。我明白了,GridColumnFactory 上的 Template 方法被赋予了一个动作作为参数。

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

谢谢!!!

【问题讨论】:

    标签: asp.net-mvc telerik-mvc


    【解决方案1】:

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

    例如;

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多