甩掉DataList,Repeater,列表数据显示得灵活--转
在WebForm 显示列表数据我们一般使用服务器控件Repeater、DataList或者GridView ,功强大能,使用简单。但同时也是有代价的,
一:不管你用哪个控件都需要牺牲一些额外的性能,因为他们的生命周期很复杂。
二:绑定数据时不够灵活,显示的过程是不透明的,想随心所欲的对某一行进行额外的控制会很麻烦。
三:会生成一对“垃圾代码”,增加页面生成和显示的负担。
四:对css样式的控制不够灵活,如果是团队合作,和美工沟通起来有点麻烦,美工设计好的静态页面开发人员甚至不能直接拿来用
所以放弃这些控件,直接写代码生成数据列表便能解决上面所有问题,这也是最透明,最灵活,最干净的显示方式,那我们就这样做吧。
怎么做呢?很简单,真的很简单,牛人莫看。
只要在页面*.aspx上调用*.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页面的相关操作就很容易理解了。
甩掉DataList,Repeater,列表数据显示得灵活--转的更多相关文章
- 【转】通用分页用户控件(DataGrid,DataList,Repeater都可以用它来分页)
通用分页控件(DataGrid,DataList,Repeater都可以用它来分页) 1.建立用户控件Pager.ascx 1.1 html </ASP:LABEL></TD> ...
- repeater没有数据显示暂无数据,无记录
方法就是在FooterTemplate加个Label并根据repeater.Items.Count判断是否有记录.关键代码如下: <FooterTemplate> <asp:Labe ...
- JavaScript进度条(datalist/repeater等多个进度条)
JS代码: function SingleProgressBar() { var iload = document.getElementById("iLoading"); var ...
- react列表数据显示
react的列表数据一般是用map循环显示的. 使用map注意:map的回调函数为箭头函数时,后面如果加大括号(箭头函数常规编写),必须要有return才可以,如果箭头函数后面没有大括号(箭头函数简写 ...
- repeater列表中直接修改状态
<asp:Repeater ID="RepeaterArticleList" runat="server" onitemdatabound="R ...
- 1-Recyclerview使用系列之Recyclerview的列表数据显示
使用步骤已经写到我的公众号,二维码在下面,欢迎关注,谢谢. 本人联系方式: 更多精彩分享,可关注我的微信公众号: 若想给予我分享更多知识的动力,请扫描下面的微信打赏二维码,谢谢!: 微信号:Weixi ...
- 【原创】datalist repeater 控件的行鼠标单击 以及 滑过特效
原文发布时间为:2009-05-06 -- 来源于本人的百度文章 [由搬家工具导入] 调用方法如:<tr id="<%# Container.ItemIndex+1 %>& ...
- Devxtreme 显示Master-Detail数据列表, 数据显示颜色
////刷新3/4簇Grid //function GetClusterGrid(id, coverageId, clusterId) { // var region = getRegionCityN ...
- 微信小程序云开发-数据库-商品列表数据显示N条数据
一.wxml文件 在wxml文件中,写页面和点击事件,添加绑定事件limitGoods 二.js文件 在js文件中写limitGoods(),使用.limit(3)表示只显示3条数据
随机推荐
- Coding/Github/Bitbucket 地址
Coding:https://coding.net/u/OberonTony Github:https://github.com/Oberon-Tonya Bitbucket:https://bitb ...
- 如何学习Java?
一点感悟 java作为一门编程语言,在各类编程语言中作为弄潮儿始终排在前三的位置,这充分肯定了java语言的魅力,在实际项目应用中,我们已经无法脱离javaa(Ps当然你可以选择不使用),但它的高性能 ...
- 关于mongodb副本集读写分离 及 日志切换
mongodb的读写分离使用Replica Sets来实现 对于replica set 中的secondary 节点默认是不可读的.在写多读少的应用中,使用Replica Sets来实现读写分离.通过 ...
- OpenCV 的四大模块
前言 我们都知道 OpenCV 是一个开源的计算机视觉库,那么里面到底有哪些东西?本文将为你解答这个问题. 模块一:CV 这个模块是 OpenCV 的核心,它包含了基本的图像处理函数和高级的计算机视觉 ...
- NGUI研究之3D模型坐标转2D屏幕坐标-血条
刚好今天有朋友问我,比較典型的样例就是游戏里面人物的血条. 原理非常easy就是把3D点换算成2D的点.可是因为NGUI自身是3D所以我们须要先把NGUI下的点转成2D点.然后在把他转成3D的点 ...
- checkAll全选的一个小例子
function checkAll(tag,flag) { //得到所有check var checkboxs = $(tag).closest("table").find(&qu ...
- python错误提示“TabError: inconsistent use of tabs and spaces in indentation”
在遍历打印10以内的奇数是出现“TabError: inconsistent use of tabs and spaces in indentation”的错误提示: 代码如下: 第一感觉没什么错误, ...
- 3.改变 HTML 内容
①x=document.getElementById("demo") //查找元素 ②x.innerHTML="Hello JavaScript"; //改变内 ...
- 相机标定过程(opencv) + matlab参数导入opencv + matlab标定和矫正
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 辛苦原创所得,转载请注明出处 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ...
- linux 中mmap的用法
函数:void *mmap(void *start,size_t length,int prot,int flags,int fd,off_t offsize); 参数start(dst):指向欲映射 ...