首页 > OOP语言 > AJAX > 正文

现存问题以及解决方案:在ASP.NET AJAX客户端得到服务器端的Data Table
2011-12-26 00:00:00   来源:www.bianceng.cn   评论:0 点击:

暂时无描述信息

本文将分析这个异常产生的原因并给出相应的解决方案,包括异常重现、异常原因、解决方案、示例代码下载等部分。

异常重现

让我们先通过一个简单的示例程序重现这个异常,然后基于这个示例程序修改并解决这个问题。

首先在页面中声明一个ScriptManager控件。由于客户端DataTable定义与Value-add包中,还需要引入PreviewScript.js脚本:

<asp:ScriptManager ID="ScriptManager1" runat="server">
  <Scripts>
    <asp:ScriptReference Assembly="Microsoft.Web.Preview" Name="Microsoft.Web.Resources.ScriptLibrary.PreviewScript.js" />
  </Scripts>
</asp:ScriptManager>

接下来声明一个HTML 按钮和一个HTML <div>,分别用来引发对Web Method的调用以及显示出返回的DataTable:

<input id="btnGetDataTable" type="button" value="Get DataTable" onclick="return btnGetDataTable_onclick()" />
<div id="result">
</div>

上面代码中,点击按钮将调用一个名为btnGetDataTable_onclick()的客户端JavaScript函数,该函数如下:

function btnGetDataTable_onclick()
{
  PageMethods.GetDataTable(cb_getDataTable);
}

可以看到,PageMethods.GetDataTable()即为服务器端名为GetDataTable()的Web Method的客户端代理。服务器端GetDataTable()方法的定义如下,注意该方法必须为静态(static),且被[System.Web.Services.WebMethod]和[Microsoft.Web.Script.Services.ScriptMethod]两个属性所修饰:

[System.Web.Services.WebMethod]
[Microsoft.Web.Script.Services.ScriptMethod]
public static DataTable GetDataTable()
{
  DataTable myDataTable = new DataTable();
  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;
}

上述代码非常简单,即建立了一个包含两个列(Id和Name)的DataTable,并为该DataTable填充了10行数据。

相关热词搜索:

上一篇:以服务器端为中心的ASP.NET AJAX模式 (Part 1 - Behavior)
下一篇:让SortTable和Asp.net Ajax和睦相处

分享到: 收藏