用代码呈现,抛弃控件绑定

13
http://www.cnblogs.com/ruandao http://blog.csdn.net/ruandao 玩玩玩玩玩玩 玩玩玩玩玩玩玩 玩玩玩玩玩 玩玩玩玩玩玩 Asp.Net Without Webform 玩玩玩 杨杨杨 [email protected]

Upload: ruandao

Post on 19-Dec-2014

1.511 views

Category:

Technology


2 download

DESCRIPTION

2011-1-16在广力的技术讲座

TRANSCRIPT

Page 1: 用代码呈现,抛弃控件绑定

http://www.cnblogs.com/ruandao http://blog.csdn.net/ruandao

玩味代码艺术无鬼论软件之道

用代码呈现,抛弃控件绑定Asp.Net Without Webform系列之

一杨无鬼 [email protected]

Page 2: 用代码呈现,抛弃控件绑定

http://www.cnblogs.com/ruandao http://blog.csdn.net/ruandao

Asp.net中的呈现

• 微软数据绑定简史• 代码所演示的示例功能• 用 Repeater显示图书列表• 用 ListView显示图书列表• 用 <% C#statement %>呈现图书列表• 请继续关注后续问题

Page 3: 用代码呈现,抛弃控件绑定

http://www.cnblogs.com/ruandao http://blog.csdn.net/ruandao

微软数据绑定简史

• ( MFC) VC、 VB– 截止 VisualStudio 6 之前,繁琐 / 简单、专业/ 玩具

• Winform– .Net 对 win32 gui 的封装,可以和 Delphi 媲

美,在绑定方面,功能和易用性能很好的兼顾。• Asp.Net– 1.0 :完成了简单的数据单项传递– 2.0 :用了不伦不类的语法和大量把程序员当傻瓜

的约定,实现了从页面 到服务器的传递

Page 4: 用代码呈现,抛弃控件绑定

http://www.cnblogs.com/ruandao http://blog.csdn.net/ruandao

微软数据绑定简史

– 从 1.0到 4.0,推出了一系列集合数据的绑定控件,感觉ListView和 Repeater唯一还可以用用而外,其他都是垃圾,尤其垃圾的是 DataGrid。

• Silverlight中的绑定– 一个字评价:好!个人认为非常好抽象了同一个进程中数

据和 UI元素之间的关系。– 同一个进程,所以在 Asp.Net中是无法使用的!

• JavaScript– 在 AjaxLibray中提供的自定义控件标签模型中,微软实

现了类似 Silverlight的绑定模型,可惜性能太差,企图在 js中包装出一个对象化的东东,似乎至今还没有成功者。

Page 5: 用代码呈现,抛弃控件绑定

http://www.cnblogs.com/ruandao http://blog.csdn.net/ruandao

– 在后来就是, .Net4.0 发布前(不仅在 Beta, 而在预发布中)微软一直鼓吹的纯客户端模板技术。当时看了一文章,我的个人评价就是非常好,可以使用类似下面的代码:

{{ String.format('5_Client.aspx?product={0}', ProductID) }}

• jQuery-tmpl– 微软最后在 .Net4.0 中砍掉了自己的技术,转而为jquery 贡献了三个插件,这是其中之一。

– 个人认为 jquery-tmpl 的好处在于,可以让我们扔掉不少以呈现为主的控件,能以更直观的方式控制客户端。

Page 6: 用代码呈现,抛弃控件绑定

http://www.cnblogs.com/ruandao http://blog.csdn.net/ruandao

代码所演示的实例功能

Page 7: 用代码呈现,抛弃控件绑定

http://www.cnblogs.com/ruandao http://blog.csdn.net/ruandao

代码讲解• Html– 整体一个 div 控制页面的对中和宽度– 顺序排列的 div 代表一系列要显示的图像– 每个 div 中用 img/h3/p 来组织内容

• Css– 主要基于定宽和 float 来设计外观– 注意整个页宽的计算:在 firebug 中观察!

• C#服务端数据提供– 用一个静态方法提供列表数据

Page 8: 用代码呈现,抛弃控件绑定

http://www.cnblogs.com/ruandao http://blog.csdn.net/ruandao

用 Repeater显示图书列表• 服务端加载绑定代码

• 页面标记

Page 9: 用代码呈现,抛弃控件绑定

http://www.cnblogs.com/ruandao http://blog.csdn.net/ruandao

用 ListView显示图书列表• 服务端加载绑定代码(同 Repeater实现)• 页面代码

Page 10: 用代码呈现,抛弃控件绑定

http://www.cnblogs.com/ruandao http://blog.csdn.net/ruandao

用<% ...%>呈现图书列表

• 无需服务端页面的加载绑定代码• 页面代码:

Page 11: 用代码呈现,抛弃控件绑定

http://www.cnblogs.com/ruandao http://blog.csdn.net/ruandao

简单的比较

• 代码实现– 直观:直接控制 html ,随心所欲。– 无需学习控件的属性、事件、方法和约定。

• 控件绑定– 对于 Repeater/ListView 而言还算直观,毕竟

眼睛能直接见到 html 标记。– 需要学习:如果题一个小要求,在每个图片的标

题名称前添上序号,你该怎么办?我相信你能!我也能,不过如果用控件,你得先查一会儿文档,而用代码方式,你随手分分钟就搞定了!

Page 12: 用代码呈现,抛弃控件绑定

http://www.cnblogs.com/ruandao http://blog.csdn.net/ruandao

Asp.Net最佳实践• 首先寻求直接的代码实现,而不是使用控件来解决需求。• 不使用 DataSource相关的技术。我有说不完的理由不用 DataSource,我对 DataSource的看法是“简单弱智”。

• 如果使用控件,避免使用回发事件。我的经验是,微软对数据传递、增删改、过滤分页排序等的功能封装,并不能让我们节省多少代码!

• 优先使用 Repeater,如果你搞不定分页等功能,可考虑使用 ListView,其他绑定控件均不使用。

• 换一种思路来考虑,很多模板项其实都没什么用,一般来说, ItemTemplate、 SeperateTemplate、 LayoutTemplate差不多就够了。

Page 13: 用代码呈现,抛弃控件绑定

http://www.cnblogs.com/ruandao http://blog.csdn.net/ruandao

请继续关注后续的问题

• 除了呈现,增删改、排序过滤分页等等?–或许用 <% %> 需要大量代码才能搞定?–或许用 <% %>比用控件更简单、更直观?

• 难道呈现非得在服务端生成 html吗?–或许 js 是更好的手段?–或许 js 可以实现,但编写很麻烦!–或许用 js比上述方法都简单明了?