甩掉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条数据
随机推荐
- Django-model_form
ModelForm a. class Meta: model, # 对应Model的 fields=None, # 字段 exclude=None, # 排除字段 labels=None, # 提示信 ...
- SpringMVC学习(一):搭建SpringMVC-注解-非注解
文章参考:http://www.cnblogs.com/Sinte-Beuve/p/5730553.html 一.环境搭建: 目录结构: 引用的JAR包: 如果是Maven搭建的话pom.xml配置依 ...
- 按照HashMap中value值进行排序
import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; ...
- JS控制input 文本框只允许输入汉字
onblur="value=value.replace(/[^/u4E00-/u9FA5]/g,'')" onbeforepaste="clipboardData.set ...
- iOS开发中的单元测试(三)——URLManager中的测试用例解析
本文转载至 http://www.cocoachina.com/cms/plus/view.php?aid=8088 此前,我们在<iOS开发中的单元测试(一)&(二)>中介绍 ...
- EasyDarwin开发出类似于美拍、秒拍的短视频拍摄SDK:EasyVideoRecorder
EasyVideoRecorder Github:https://github.com/EasyDarwin/EasyVideoRecorder EasyVideoRecorder作为一款短视频拍摄的 ...
- final、finally、三个关键字的区别
一 final 如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能既被声明为 abstract的,又被声明为final的.将变量或方法声明为final,可以 ...
- Performance Tuning Using Linux Process Management Commands
[root@bigdata-server-02 /]# ps --help all Usage: ps [options] Basic options: -A, -e all processes -a ...
- 如何克隆UBUNTU14.04LTS
先对目标盘sdb做好处理,分区,格式化,挂载等操作sudo fdisk /dev/sdb1fdisk常用命令如下,m是帮助,n创建新分区,d删除分区,w保存退出.分好区后,对sdb1进行格式化和挂载: ...
- Objective-c继承与组合
Objective-C 继承 继承:是一种XXX是XXX的关系.例如:学生是人,所以学生与人就是继承的关系. #import <Foundation/Foundation.h> @inte ...