licongjie的博客

专心、专注、专业
随笔 - 26, 文章 - 1, 评论 - 207, 引用 - 1
数据加载中……

实战小技巧系列(3):服务器端数据初始化到客户端数组中

  为了增强用户体验,也为了减少服务器端的回发操作,使得服务器端与客户端之间的交互越来越被广泛使用,各种AJAX产品的出现也正是顺应了这股潮流。 

  在这里,我也不讲什么深奥的东西,只是把自己在开发当中遇到的一些实用的东西拿出来跟大家共享,希望不会有重的东西在。

  案例:

  现在我希望能够从数据库里读出一个数据列表,再把这个列表初始化到客户端的一个数组中去。这是一个典型的客户端与服务器端的交互,相信大家一看到这个就会有好多种方法来实现,在这里我就帮大家稍微整理一下。

  解决方法:

  1、通过AJAX实现

  很多人可能会选择这种方法,确实用这种方法很方便,对asp.net 中的ajax来说,就可以直接从服务器端返回一个数组了。

  2、在客户端用服务器端标记循环实现

  这种方法,相信以前如果做过ASP的朋友一定比较熟悉,类似于以下代码:

  <script>

  var list = [];

<% 服务器端循环开始%>

  list.push(<%循环值%>);

  <%服务器端循环结束%>

  </script>

  3、用Page.ClientScript中的方法实现

  在客户端先定义以下方法:

  <script>

  var list = [];

  function AddObject(object)

  {

   list.push(object);

  }

  </script>


  在服务器端:

  for循环

  {

   Page.ClientScript.RegisterStartupScript(this.GetType(), "dd", "AddObject("+循环值+");", true);

  }

 4、我觉得这一个方法比较巧妙,我也经常使用。

  客户端:

  <script>

  var list = [];

  function AddObject(object)

  {

   list.push(object);

  }

   <asp:Literal ID="userObjectUtil" runat="server"></asp:Literal>

  </script>

  注意,在<script></script>标记中加入了一个服务器控件, <asp:Literal ID="userObjectUtil" runat="server"></asp:Literal>,微软的解析是够强的,放在这里在服务器端照样能够使用。

  服务器端:

  StringBuilder sb = new StringBuilder(200);

  for循环

  {

   sb.AppendFormat("AddObject('{0}');\n", 循环值);

  }

   userObjectUtil.Text = sb.ToString();


  本人比较常用的就这么几种,不知道大家还有哪些好的方法。因为像这种应用,应该是越简单越好,没有必要搞得比较复杂。

posted on 2008-05-01 09:29 李.net 阅读(1513) 评论(5)  编辑 收藏

评论

#1楼    回复  引用  查看    

第四种方法,智能标记貌似不识别,但是运行没问题。似乎服务器控件 和<%%> 的功能差不多。
2008-05-01 11:10 | 今日事 [未注册用户]

#2楼 [楼主]   回复  引用  查看    

@今日事
确实,在客户端智能识别不到,但在服务器端却可以识别得到
2008-05-01 11:19 | 李.net      

#3楼    回复  引用  查看    

可以使用Page.RegisterArrayDeclaration(现在已经搬到ClientScriptManager中了)

int[] data = { 1, 2, 3, 5, 7, 11, 13, 17 };

string[] dataStringArray = data.Select(i => i.ToString()).ToArray();

Page.ClientScript.RegisterArrayDeclaration("data", string.Join(", ", dataStringArray));
---------------------
output:

<script type="text/javascript">
//<![CDATA[
var data = new Array(1, 2, 3, 5, 7, 11, 13, 17);
//]]>
</script>
2008-05-01 15:32 | rex xiang      

#4楼    回复  引用  查看    

以前就用ajax来得到。没想哪么多,学习啦
2008-05-02 11:13 | 镜涛      

#5楼    回复  引用  查看    

又学了一招
2008-05-03 00:08 | 留恋星空      

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
 
向地震灾区捐赠爱心