首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > .NET > C#.NET > ASP.NET 2.0 AJAX Webservice调用 返回DataTable 新解
【标  题】:ASP.NET 2.0 AJAX Webservice调用 返回DataTable 新解
【关键字】:ASP.NET,2.0,AJAX,Webservice,DataTable
【来  源】:http://blog.csdn.net/pandahyang/archive/2007/04/19/1570100.aspx

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;
    }

    
}


关于生成缩略图:c#:【上一篇】
关于.NET(C#)中字符型(Char)与数字类型的转换, CLR via c# 读书笔记:【下一篇】
【相关文章】
  • asp.net动态加载用户控件问题解决日记
  • JSF 可以让AJAX 不使用JavaScript
  • 在PHP中使用ASP.NET AJAX
  • asp.net2.0 javascript 回调服务器端方法
  • AJAX学习笔记一(认识XMLHttpRequest对象)
  • ajax返回中文乱码,servlet中的显示乱码,post提交的乱码问题,编码大总结
  • Asp.Net Trace
  • .NET2.0抓取网页全部链接
  • .NET 2.0远程传输数据集的优化方法(WebService)
  • 使用easyobjects asp.net ajax + mygeneration(2) easyobjects概述
  • 【随机文章】
  • 让你的设备管理器更“强大” 经典技巧三则
  • JSP+JDBC(Thin模式)连接Oracle
  • 发布一个CHyperLink类,可适应SDK和MFC
  • 动态创建HTML页(有详细的注释)
  • SYBASE Replication System安装与维护
  • Sybase PowerBuilder9.0 高速开放式集成开发环境
  • 用LIDS增强系统安全(1)
  • 全球超级计算机500强揭晓
  • TD-SCDMA及其演进策略
  • 提示符随着路径改变而改变
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.