zoukankan      html  css  js  c++  java
  • (摘要)ASP.NET CustomRender 控件

    想要继续使用 webforms, 但又想能比较大程度的操控控件生成的 html 细节时,可以考虑用这个控件。将需要自定义 render html 的控件放到其 ControlTemplate 下。然后在 designer 界面点一下 "Update HtmlTemplate",控件就会在 design time 去进行 render, 并且把结果自动放到 HtmlTemplate 属性中;然后,只要对该 HtmlTemplate 里面的内容进行调整,就可以操控 html 生成的细节。

    举例来说,一个传统的 DataGrid 控件在经过此转换后,代码可以定制成如下 html:

    <i88:CustomRender runat="server" ID="c1">
        <ControlTemplate>
            <asp:DataGrid ID="dg1" runat="server" SelectedItemStyle-BackColor="Red"
                AutoGenerateColumns="false" SelectedIndex="1" SelectedItemStyle-CssClass="selected"
                DataSource='<%# DummyData %>'>
                <Columns>
                    <asp:BoundColumn DataField="Name" />
                    <asp:ButtonColumn DataTextField="Price" DataTextFormatString="{0:c}" CommandName="Select" />
                </Columns>
            </asp:DataGrid>
        </ControlTemplate>
        <HtmlTemplate>
            <% for (int i = 0; i < dg1.Items.Count; i++) {
                   // enumerate the DataGrid's items so we can choose how to render them
                   var item = dg1.Items[i];
                   // the ButtonColumn is rendering a LinkButton or Button 
                   var priceLink = (IButtonControl)item.Cells[1].Controls[0];
                   %>
            <ul class="item<%= dg1.SelectedIndex == i ? " selected" : "" %>">
                <li><%= item.Cells[0].Text %></li>
                <li class='price'                 onclick="<%= Page.GetPostBackEventReference((Control)priceLink) %>">                 <%= priceLink.Text %>             </li>
            </ul>
            <% } %>
        </HtmlTemplate>
    </i88:CustomRender>

    模板的语法可以非常类似 asp.net mvc 的写法。一个 DataGrid 控件经此转换后,变成了用 <ul> 布局,并且每一行甚至可以横过来排。只需要加一点小小的 CSS:

    <style type="text/css">
        ul.item {
            float: left;
            list-style-type: none;
            padding: 0px 10px 0px 10px;
        }
        ul.selected {
            border: solid 1px red;
        }
        li.price {
            cursor: pointer;
            color: Blue;
            text-decoration: underline;
        }
    </style>

    下载此控件的地址:http://archive.msdn.microsoft.com/aspnetcustomrender/Release/ProjectReleases.aspx?ReleaseId=2914

    Blog 原文地址:

    http://weblogs.asp.net/infinitiesloop/archive/2009/07/01/asp-net-webforms-taking-back-the-html.aspx

  • 相关阅读:
    初始Dubbo
    ProcessBuilder执行本地命令
    Deep Learning的基本思想
    机器学习(Machine Learning)
    Group By和Order By的总结
    Oracle sqlldr命令
    redis的简单操作
    Java程序中做字符串拼接时可以使用的MessageFormat.format
    Bean的作用域
    DI延伸
  • 原文地址:https://www.cnblogs.com/RChen/p/1996063.html
Copyright © 2011-2022 走看看