如何将代码隐藏中的ADO数据表(可在pageload上获得)返回到javascript?

如何将代码隐藏中的ADO数据表(可在pageload上获得)返回到javascript?,javascript,asp.net,datatable,code-behind,Javascript,Asp.net,Datatable,Code Behind,在页面加载时,我有我的DataTable结果可用,我需要将其传递回javascript进行处理 我有什么选择 使用隐藏字段来备份数据。不知道具体如何,可以将其转换为xml/json,然后通过javascript访问它。好像很痛。这种方法没有额外的往返 使用webmethod/webservice直接从javascipt发出调用,然后返回DataTable,但是这需要额外的往返,因为我已经在pageload上提供了DataTable 还可以使用访问代码隐藏中的对象(即如果只是数组,请参阅) 如果它

在页面加载时,我有我的DataTable结果可用,我需要将其传递回javascript进行处理

我有什么选择

  • 使用隐藏字段来备份数据。不知道具体如何,可以将其转换为xml/json,然后通过javascript访问它。好像很痛。这种方法没有额外的往返
  • 使用webmethod/webservice直接从javascipt发出调用,然后返回DataTable,但是这需要额外的往返,因为我已经在pageload上提供了DataTable

  • 还可以使用访问代码隐藏中的对象(即如果只是数组,请参阅)


    如果它是自定义对象,我认为最好通过.ajax请求调用服务器方法,并将它们加载到javascript对象中,然后处理数据。

    有许多方法可以按照您已经论证过的方法来处理。每当需要这样做时,我都会使用clientscript.Regite将数据写入javascript变量rclientscriptblock方法,然后在页面中使用javascript访问变量并执行其余的解析。


    您只需使用字符串生成器或您选择的任何工具来调暗包含表值的javascript数组,并将其传递到页面。

    我在一个asp.net应用程序中也有同样的要求。我所做的是,我从第_Load()页上的DataTable创建了一个字符串变量通过对行分隔符和列分隔符使用自定义分隔符,如::;等,然后使用CSS{display:none;}将字符串设置为隐藏字段或文本框文本

    之后,如果希望在每次完整/部分回发时执行,可以在javascript$(document).ready()块或javascript pageLoad函数()中获取隐藏字段或文本框的值

    获取该值并将其解码,就像在code behind中将数据表编码为字符串一样,然后根据需要进行处理


    希望它能有所帮助:)

    在尝试了上述几种选项后,我发现#3()是访问ADO查询结果(如DataTable或DataSet)的最佳选择,因为它是实现最快的方法,并且由于内联表达式在页面构造过程中得到解析,因此没有额外的往返

    我尝试了#5(将数据绑定到数据控件,然后将其隐藏),但速度明显较慢,而且我很难找到一个可以公开数据表/数据集所有功能的控件。您可以将记录绑定到少数几个数据控件,但我发现,在转换为repeater控件或类似控件时,DataSet/DataTable附带的许多“好的特性”都丢失了。如果您使用一个功能更全面的ASP控件来恢复这些功能,则会降低性能,因为这些控件用于读/写和呈现内容以供显示。而且访问数据并不像我预期的那样简单,因为它是隐藏在代码中的。

    我曾考虑过#4(通过ASP的ClientScript.RegisterStartupScript传递数据),但不想序列化/反序列化我需要公开的每个对象,也不想处理它带来的任何问题。这似乎不是正确的方式。不过,我想对于更简单的对象也可以。

    #1(将数据序列化到隐藏字段)与上面的#4(通过ASP的ClientScript.RegisterStartupScript传递数据)几乎是相同的概念,所以我也不需要考虑这个问题。


    另一种(第二种最好的)可能性是执行#2(使用webmethod/webservice)正如@Sundeep和@ron_tornambe所指出的那样。然而,这个选项为页面请求添加了额外的往返,并且由于上面的场景中的DataTable/DataSet已准备好在页面加载时使用,所以它对我来说不是最优的。如果不是这样,我会说它等于我的第一个选择#3(ASP.NET内联表达式)因为您可以使用功能齐全的对象。

    Hi Sundeep,它不是数组,只是数据集中的ADO.net DataTable。基本上,我只是想让javascript中的一些数据库记录可用于Google Maps和JQueryUI。这似乎是一个常见的情况,我觉得我缺少一些基本概念介绍如何在ASP和ADO中执行此操作。您还可以根据需要使用AJAX检索数据,而不是创建datatable并将所有数据传递给每个浏览器实例。如果您需要此替代方法的示例,请告诉我。