• 甩掉DataList,Repeater,列表数据显示得灵活


       在WebForm 显示列表数据我们一般使用服务器控件Repeater、DataList或者GridView ,功强大能,使用简单。但同时也是有代价的,
     一:不管你用哪个控件都需要牺牲一些额外的性能,因为他们的生命周期很复杂。
     二:绑定数据时不够灵活,显示的过程是不透明的,想随心所欲的对某一行进行额外的控制会很麻烦。
     三:会生成一对“垃圾代码”,增加页面生成和显示的负担。
     四:对css样式的控制不够灵活,如果是团队合作,和美工沟通起来有点麻烦,美工设计好的静态页面开发人员甚至不能直接拿来用
       所以放弃这些控件,直接写代码生成数据列表便能解决上面所有问题,这也是最透明,最灵活,最干净的显示方式,那我们就这样做吧。
       怎么做呢?很简单,真的很简单,牛人莫看。
       只要在页面*.aspx上调用*.aspx.cs里的方法或变量,然后循环输出即可。
     
       比如我们要在页面上显示一个用户信息数据列表。

       首先我们见一个Model类,作为demo我们就不建数据库了,如下:
       PersonOM.cs

      public class PersonOM
        {
            
    public string Name { getset; }

            
    public int Age { getset; }
        }
          就两个属性,姓名和年龄。
        然后在WebForm1.aspx.cs里写一个方法获取用户信息:

      WebForm1.aspx.cs:

        public partial class WebForm1 : System.Web.UI.Page
        {
            
    public static List<PersonOM> GetResult() //这里我写的是静态方法,这样在页面调用的时候就不需要实例化当前的page类
            {
                List
    <PersonOM> lstPs = new List<PersonOM>();
                PersonOM ps 
    = null;
                
    for (int i = 1; i <= 10; i++
                {
                    ps 
    = new PersonOM();
                    ps.Name 
    = "Name" + i;
                    ps.Age 
    = 20 + i;
                    lstPs.Add(ps);
                }
                
    return lstPs;
            }
               
        }     

     然后就是绑定数据了,这里我们不再使用服务器控件了,我们在WebForm1.aspx页面上循环输出:

            <ul>
                
    <% List<PersonOM> lstps = WebForm1.GetResult(); %>
                
    <% foreach ( PersonOM ps in lstps)
                   { 
    %>
                  
    <li>姓名:<%=ps.Name %>&nbsp;&nbsp;年龄:<%=ps.Age %></li>
                
    <%%>
            
    </ul>

       在浏览器在浏览,我们就看到了下面的画面:

       

       这样生成的页面是不含任何垃圾代码的。

      如果你使用过asp.net MVC ,你会发现和这MVC 非常相识。其实这也是MVC思想啊,有Model(PersonOM.cs)、有控制器(WebForm1.aspx.cs)、有View(WebForm1.aspx),而且都实现了三者之间的分离。
     
       当然,GetResult() 方法你也不一定必须写成静态的,非静态也是可以的,但在页面输出的时候要实例化当前page类,而且必须在<form runat="server">内。
       即:
     <form id="form1" runat="server">
       
    <% WebForm1 wf1 = new WebForm1();  %>
       
           
    <ul>
                
    <% List<PersonOM> lstps = WebForm1.GetResult(); %>
                
    <% foreach ( PersonOM ps in lstps)
                   { 
    %>
                  
    <li>姓名:<%=ps.Name %>&nbsp;&nbsp;年龄:<%=ps.Age %></li>
                
    <%%>
            
    </ul>
            
      
    </form>
      其实回过头来想一想,WebForm1是个部分(partial)类,一部分在WebForm1.aspx.cs里,一部分在WebForm1.aspx里,意识到这一点,在WebForm1.aspx页面的相关操作就很容易理解了。

    源码下载

    原文地址:http://www.cnblogs.com/xumingxiang/archive/2010/05/04/1727586.html

    作者 : 徐明祥
    出处:http://www.cnblogs.com/xumingxiang 
    版权:本文版权归作者和博客园共有
    转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
    要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
  • 相关阅读:
    JdbcTemplate
    C# 将内存中的datatable数据导出为Excel(方法一,以文件流方式导出)【转载】
    DEV GridControl小结【转载】
    DEV控件:gridControl常用属性设置2【转载】
    DevExpress控件学习总结【转载】
    DEV中的TreeList控件应用的一个小效果实现【转载】
    DEV控件:gridControl常用属性设置【转载】
    工具箱修复Dev控件显示【转载】
    C#如何实现记住密码,自动登录功能?【转载】
    将MenuStrip控件中的信息添加到TreeView控件中【转载】
  • 原文地址:https://www.cnblogs.com/xumingxiang/p/1727586.html
Copyright © 2020-2023  润新知