甩掉DataList,Repeater,列表数据显示得灵活
在webform 显示列表数据我们一般使用服务器控件repeater、datalist或者gridview ,功强大能,使用简单。但同时也是有代价的,
一:不管你用哪个控件都需要牺牲一些额外的性能,因为他们的生命周期很复杂。
二:绑定数据时不够灵活,显示的过程是不透明的,想随心所欲的对某一行进行额外的控制会很麻烦。
三:会生成一对“垃圾代码”,增加页面生成和显示的负担。
四:对css样式的控制不够灵活,如果是团队合作,和美工沟通起来有点麻烦,美工设计好的静态页面开发人员甚至不能直接拿来用
所以放弃这些控件,直接写代码生成数据列表便能解决上面所有问题,这也是最透明,最灵活,最干净的显示方式,那我们就这样做吧。
怎么做呢?很简单,真的很简单,牛人莫看。
只要在页面*.x上调用*.aspx.cs里的方法或变量,然后循环输出即可。
比如我们要在页面上显示一个用户信息数据列表。
首先我们见一个model类,作为demo我们就不建了,如下:
personom.cs
public class personom
{
public string name { get; set; }
public int age { get; set; }
}
就两个属性,姓名和年龄。
然后在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 %> 年龄:<%=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 %> 年龄:<%=ps.age %></li>
<%} %>
</ul>
</form>
其实回过头来想一想,webform1是个部分(partial)类,一部分在webform1.aspx.cs里,一部分在webform1.aspx里,意识到这一点,在webform1.aspx页面的相关操作就很容易理解了。
下载:
作者 郑文亮
上一篇: 写给996企业中不同的人们
下一篇: asp.net之反射