自从认识了Asp.net Ajax 之后,Ajax的使用,我一直是用客户端访问WebService的方式。但是用久了之后,却发现它有几个我不太喜欢的地方。
1.页面代码或者说UI层的服务端代码被分离了,对于那些针对某个特地页面的功能代码,这对别人接手我的代码,或者将来自己维护时都是个不方便的地方。
2.庞大的客户端脚本库,前段时间客户培训时,发现初次访问时偶尔会出现Sys未定义的情况。虽然我不能100%确定是客户端脚本库未下载完的问题,但“偶尔出现”、“初次访问”这几个关键词使我自然而然的往脚本库未下载完的方向去怀疑。
3.只能返回Json,起初觉得它在客户端被反序列化成对象非常酷,因为我传过来的通常是强类型的集合。通过传过来的数据构建HTML,这让我觉得动态的展现页面原来是如此简单,方便。但是不久之后,我便怀疑了这种处理方式的可取性。在接触EF一段时间后,当我再去接手一个使用ADO并且存在大量SQL语句拼接的项目模块时,我对EF产生了前所未有的好感。我明白了编译时错误和运行时错误这种天堂与地域的差别。纠结了一段时间后,我决定用EF重写所有代码。这件事对我使用Javascript也产生了影响,Javascript不存在编译时错误,那么代码的可维护性就有很高的要求。客户端拼接HTML神马的,如果没有较好的封装,还是少做。
-------------------
前几天尝试了一下Jquery中的Ajax功能,感觉不错。资料:
http://www.cnblogs.com/QLeelulu/archive/2008/04/21/1163021.html
既然AJAX的访问代码也写在普通页面了,那就可以访问页面上的控件了,那为什么不让控件帮助我们输出HTML。上网一搜,果然有这样的介绍文章。
http://blog.csdn.net/net_lover/archive/2009/10/15/4673931.aspx
示例代码:
//GVbuyBacterin 为 GRIDVIEW控件 GVbuyBacterin.DataSource =XXXXXXXXXXXXX GVbuyBacterin.DataBind(); Response.Clear(); StringBuilder sb = new StringBuilder(); System.IO.StringWriter tw = new System.IO.StringWriter(sb); HtmlTextWriter htw = new HtmlTextWriter(tw); GVbuyBacterin.RenderControl(htw);//取代在客户端的HTML拼接 Response.Write(sb); Response.End();
以下函数要重写
public override void VerifyRenderingInServerForm(Control control) { }