祥叔学编程

祥叔学编程
随笔 - 43, 文章 - 0, 评论 - 250, 阅读 - 20万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

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

Posted on   祥叔  阅读(1231)  评论(11编辑  收藏  举报
   在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 
版权:本文版权归作者和博客园共有
转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任

 

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示