ASP.NET 2.0 AJAX Webservice调用 返回DataTable 新解

 

今日早晨女朋友给我送了一桶银耳汤,幸福呀,昨日的问题也迎刃而解。

近日项目需要做一个页面的异步载入,以前没做过,遂习惯性到google寻找答案。 找到2个比较可行的解决方案。

ASP.NET 2.0 AJAX中Webservice调用方法示例
现存问题以及解决方案:在ASP.NET AJAX中从客户端向服务器端传送DataTable

但经过试用,都不能成功运行。以下为遇到的问题及解决方案。

1。运行时遇到VS的轻量级调试服务器崩溃

此原因是由于引入数据集转换不正确造成的。

错误代码:

       < jsonSerialization maxJsonLength = " 500000 " >
        
< converters >
          
< add name = " DataTableConverter "  type = " Microsoft.Web.Preview.Script.Serialization.Converters.DataTableConverter, Microsoft.Web.Preview " />
        
</ converters >
      
</ jsonSerialization >

正确代码:

       < jsonSerialization maxJsonLength = " 500000 " >
        
< converters >
          
< add name = " DataTableConverter "  type = " Microsoft.Web.Preview.Script.Serialization.Converters.DataTableConverter, Microsoft.Web.Preview " />
          
< add name = " DataRowConverter "  type = " Microsoft.Web.Preview.Script.Serialization.Converters.DataRowConverter, Microsoft.Web.Preview " />
        
</ converters >
      
</ jsonSerialization >

需要加入DataRowConverter的引用,因为转换DataTable的时候需要对DataRow的转换

2。提示找不到Microsoft.Web.Preview.Script.Serialization.Converters.DataTableConverter

需要下载ASP.NET 2.0 AJAX Futures January CTP,安装,并在项目中引用Microsoft.Web.Preview.dll,以获取数据转换方法

3。转换后的客户端DataTable的使用处理方式类同于C#中对DataTable的处理方式,使用result.rows.length获取RowNum,使用result.rows[i]["Id"]获取字段信息。

     function  pageLoad() {
        WS1.GetDataTable(SetResult);
    }

    
    
function  SetResult(result) {

        
var contentBuilder = new Sys.StringBuilder();
        
for (var i = 0; i < result.rows.length; ++i)
        
{
            contentBuilder.append(
"<strong>Id</strong>: ");
            contentBuilder.append(result.rows[i][
"Id"]);
            contentBuilder.append(
"<strong>Name</strong>: ");
            contentBuilder.append(result.rows[i][
"Name"]);
            contentBuilder.append(
"<br />");
        }

        
        $get(
"result").innerHTML = contentBuilder.toString();
    }

 

主要就是以上问题,下面是详细代码,仅供参考

Default.aspxWS1.asmx

< html >
< head  runat ="server" >
    
< title > Untitled Page </ title >
    
< script  language ="javascript"  type ="text/javascript" >
    
function pageLoad(){
        WS1.GetDataTable(SetResult);
    }

    
    
function SetResult(result){

        
var contentBuilder = new Sys.StringBuilder();
        
for (var i = 0; i < result.rows.length; ++i)
        
{
            contentBuilder.append(
"<strong>Id</strong>: ");
            contentBuilder.append(result.rows[i][
"Id"]);
            contentBuilder.append(
"<strong>Name</strong>: ");
            contentBuilder.append(result.rows[i][
"Name"]);
            contentBuilder.append(
"<br />");
        }

        
        $get(
"result").innerHTML = contentBuilder.toString();
    }

    
</ script >
</ head >
< body >
    
< form  id ="form1"  runat ="server" >
        
< asp:ScriptManager  ID ="ScriptManager1"  runat ="server" >
            
< Services >
                
< asp:ServiceReference  Path ="WS1.asmx"   />
            
</ Services >
        
</ asp:ScriptManager >
        
< div  id ="result" > Loading... </ div >
    
</ form >
</ body >
</ html >

 

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

/// <summary>
/// WS1 的摘要说明
/// </summary>

[WebService(Namespace  =   " http://tempuri.org/ " )]
[WebServiceBinding(ConformsTo 
=  WsiProfiles.BasicProfile1_1)]
[ScriptService]
public   class  WS1 : System.Web.Services.WebService
{

    
public WS1 () {

        
//如果使用设计的组件,请取消注释以下行 
        
//InitializeComponent(); 
    }


    [WebMethod]
    [ScriptMethod]
    
public DataTable GetDataTable()
    
{
        DataTable myDataTable 
= new DataTable("haha");
        myDataTable.Columns.Add(
new DataColumn("Id"typeof(int)));
        myDataTable.Columns.Add(
new DataColumn("Name"typeof(string)));

        
for (int i = 0; i < 10++i)
        
{
            DataRow newRow 
= myDataTable.NewRow();
            newRow[
"Id"= i;
            newRow[
"Name"= string.Format("Name {0}", i);

            myDataTable.Rows.Add(newRow);
        }


        
return myDataTable;
    }

    
}


你可能感兴趣的:(Ajax,webservice,function,server,asp.net,asp)