引用:
最近在项目中接触到无刷新分页技术.觉得有必要记录下一些东西.
首当其冲的当然是首次用到的JSON技术.之前在做ajax的时候,对于handler传回给js的数据,总是以一个又一个的字符串数组作为载体.相当麻烦. 虽然之前看过有关JSON的文字,但是却没有想到使用JSON,于是,在界面上我会弄一个又一个隐藏域.. 汗颜...
对于JSON,又有进一步的理解了. 对于实体类中含有DateTime类型字段的对象,个人理解是最好不要使用JSON,因为在js接收到数据之后,是以毫秒为单位的.这也倒是挺好解决,问题是还含有时区,并且,假设数据库中的值是"2010-5-10 12:00:00",我没有完美解决的办法, 我所做的办法是,在查询数据库的时候,对该值进行截断,只取"2010-5-10",否则,js接收到的数据,就乱了套..
如果对于实体类中不包含DateTime类型字段,并且的字段比较多. 个人觉得JSON是首选.
下面是在asp.net中使用JSON的步骤,
在UI层,需要添加"System.ServiceModel.Web"引用.
1.首先获得想要的数据
List<Models.Blog_albumsInfo> All_album=Bll.Blog_albums.FindAllAlbums(user_id);
2.实例化JSON对象,
var json = new DataContractJsonSerializer(typeof(List<Models.Blog_albumsInfo>), new Type[] {typeof(string) });
3.将JSON获得的数据写到上下文的响应中
json.WriteObject(context.Response.OutputStream, All_album);
在js中接收到的数据,会是这样一种形式
/**************
[{ "Album_fm": "1", "Album_id": 18, "Album_name": "靓照1", "Sort": 18, "User_id": 1 },
{ "Album_fm": "1", "Album_id": 17, "Album_name": "靓照7", "Sort": 17, "User_id": 1 },
{ "Album_fm": "1", "Album_id": 16, "Album_name": "靓照6", "Sort": 16, "User_id": 1 }]
**************/
上面的形式, 已经很明了的表示了实体类每个对象的数据,只需要进行字符串处理,即可得到相应数据,
在js中,可以使用eval函数把字符串数组转换成dom对象,循环遍历即可.
//转成dom对象
var obj = eval("(" + data_arr[0] + ")");
for (var i = 0; i < obj.length; i++) {
var id = obj[i].Album_id;//相应数据
var name = obj[i].Album_name;//相应数据...
}
需要注意的是,以上方法,是针对VS2008,并且已经打上SP1补丁的. 如果没有打SP1补丁.还需要更多步骤
UI层添加“System.Runtime.Serialization”引用。DataContract
对实体类添加[DataContract]特性,另外对每个属性添加[DataMember]特性,其他步骤与上面相同。