zoukankan      html  css  js  c++  java
  • 使用JavaScriptConverter实现返回DataTable对象

    使用JavaScriptConverter
    •复杂类型作为返回值时可能会出现问题
    –循环引用
    •解决方案
    –使用自定义数据类型封装复杂类型
    –在web.config里定义Converter

    aspx
        <form id="form1" runat="server">
            
    <asp:ScriptManager ID="ScriptManager1" runat="server">
                
    <Services>
                    
    <asp:ServiceReference Path="DataTableService.asmx" InlineScript="true" />
                
    </Services>
            
    </asp:ScriptManager>
            
            
    <input type="button" value="Get DataTable" onclick="getDataTable();" />
            
            
    <div id="result"></div>
            
            
    <script language="javascript" type="text/javascript">
                function getDataTable()
                {
                    DataTableService.GetDataTable(onSucceeded, onFailed);
                }
                
                function onSucceeded(result)
                {
                    
    // alert(result);
                    var sb = new Sys.StringBuilder("<table border='1'>");
                    sb.append(
    "<tr><td>ID</td><td>Text</td></tr>");
                    
    for (var i = 0; i < result.rows.length; i++)
                    {
                        sb.append(
                            String.format(
                                
    "<tr><td>{0}</td><td>{1}</td></tr>",
                                result.rows[i][
    "ID"],
                                result.rows[i].Text));
                    }
                    sb.append(
    "</table>");
                    
                    $
    get("result").innerHTML = sb.toString();
                }
                
                function onFailed(error)
                {
                    alert(error.get_message());
                }
            
    </script>
        
    </form>

    DataTableService.asmx
    <%@ WebService Language="C#" Class="DataTableService" %>

    using System;
    using System.Web;
    using System.Web.Services;
    using System.Web.Services.Protocols;
    using System.Web.Script.Services;
    using System.Data;

    [WebService(Namespace 
    = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo 
    = WsiProfiles.BasicProfile1_1)]
    [ScriptService]
    public class DataTableService  : System.Web.Services.WebService
    {
        [WebMethod]
        
    public DataTable GetDataTable()
        {
            DataTable dt 
    = new DataTable();
            dt.Columns.Add(
    new DataColumn("ID"typeof(int)));
            dt.Columns.Add(
    new DataColumn("Text"typeof(string)));

            Random random 
    = new Random(DateTime.Now.Millisecond);
            
    for (int i = 0; i < 10; i++)
            {
                dt.Rows.Add(i, random.Next().ToString());
            }

            
    return dt;
        }

    }

    web.config中的</system.web>后面加入以下代码,指定要用到的Converter,这里其中的一个“BoyConverter”是一个自定义的Converter
      <system.web.extensions>
        
    <scripting>
          
    <webServices>
          
    <!-- Uncomment this line to customize maxJsonLength and add a custom converter -->
          
          
    <jsonSerialization>
            
    <converters>
                        
    <add name="DataSetConverter" type="Microsoft.Web.Preview.Script.Serialization.Converters.DataSetConverter, Microsoft.Web.Preview" />
                        
    <add name="DataRowConverter" type="Microsoft.Web.Preview.Script.Serialization.Converters.DataRowConverter, Microsoft.Web.Preview" />
                        
    <add name="DataTableConverter" type="Microsoft.Web.Preview.Script.Serialization.Converters.DataTableConverter, Microsoft.Web.Preview" />
                        
    <add name="BoyConverter" type="Converter.BoyConverter, App_Code" />
                    
    </converters>
          
    </jsonSerialization>
          
          
    <!-- Uncomment this line to enable the authentication service. Include requireSSL="true" if appropriate. -->
          
    <!--
            
    <authenticationService enabled="true" requireSSL = "true|false"/>
          
    -->

          
    <!-- Uncomment these lines to enable the profile service. To allow profile properties to be retrieved
               and modified 
    in ASP.NET AJAX applications, you need to add each property name to the readAccessProperties and
               writeAccessProperties attributes. 
    -->
          
    <!--
          
    <profileService enabled="true"
                          readAccessProperties
    ="propertyname1,propertyname2"
                          writeAccessProperties
    ="propertyname1,propertyname2" />
          
    -->
          
    </webServices>
          
    <!--
          
    <scriptResourceHandler enableCompression="true" enableCaching="true" />
          
    -->
        
    </scripting>
      
    </system.web.extensions>
    最后还要引入Microsoft.Web.Preview.dll才能正确使用
  • 相关阅读:
    现在的技术QQ群为什么都变成了这样?效率高也是有弊端的?
    【php】php中mail()不可用,php中sendmail不能用的解决方法
    Cannot validate since no PHP executable is set. Use the setting 'php.validate.executablePath' to configure the PHP executable.无法使用PHP可执行的设置。设置php.validate。executablePath配置PHP可执行文件。
    20150907自动化测试之Appinum For Android(前篇)
    [摘]关于目标管理
    婚恋网站应该有视频功能
    GIS的双屏显示模式是一个实用的创新
    移动产品将越分越细
    基于开源GIS软件的电子政务地理信息应用解决方案
    手机长途话费应再降!
  • 原文地址:https://www.cnblogs.com/timy/p/1173142.html
Copyright © 2011-2022 走看看