Ajax呼び出しバックグラウンドメソッドのいくつかの書き方(二)Ajax.dll

4884 ワード

プラグインAjaxを使用します.dllまたはAjaxPro.dll.Ajaxを使いました.dll、まずネット上でAjaxをダウンロードする必要があります.dll、次にプロジェクトに参照し、Web.Configでは以下のように構成されています.
システムでWebのノードにこの文を加えると、
<httpHandlers>
      <add verb="POST,GET" path="ajax/*.ashx" type="Ajax.PageHandlerFactory, Ajax" />
    </httpHandlers>

ページコード:
   <div id="Div_1"> </div> 
<asp:Button ID="btnOK" runat="server" Text="OK" OnClientClick="return CallTest();" />
<br/><asp:Label ID="lblEmpNo" runat="server"></asp:Label>

JSコード:
 <script>
 //                    。 
        function getGroups_callback(response) {
            var dt = response.value; //            ,        ,      。
            document.getElementById("Div_1").innerHTML = dt;
        }

        function CallTest() {
            var EmpName = document.getElementById('txtClientId').value;
            WebFormAjax.Test(EmpName, getGroups_callback);
            return false;
        } 
    </script>

C#バックグラウンドコード:
 protected void Page_Load(object sender, EventArgs e)
        {
            Ajax.Utility.RegisterTypeForAjax(typeof(WebFormAjax));      //typeof            
            
        }
[Ajax.AjaxMethod]  //        
        public string Test(string EmpName)
        {
            Thread.Sleep(3000);
            if (lblEmpNo != null)   //               Label,    null,  ,                     
            {
                lblEmpNo.Text = EmpName + "123";
            }
            return EmpName + "abc";
        }

限界:Ajaxを使用する.dllはバックグラウンドを呼び出す上で確かに便利であるが,バックグラウンドでフロントのサーバコントロールに値を割り当てることはできず,バックグラウンドメソッドでのみフロントに値を返し,フロントでJSを介してコントロールに値を与える.
実は本人の目的は1つのこのような機能を試験したいので、フロントのボタンはバックグラウンドの事件の中で他のサーバーのコントロールに値を割り当てることができて、特にGridViewはデータをバインドしますこのようにして、しかしデータの量が多いため、この過程は比較的に遅くて、またフロントで1つの待つマスクのヒントをプラスしたいと思って、データが完全にGridViewにバインドするまで、マスクの層はやっと消えます.これはAjaxを使わなければなりません.
明らかに、上記の方法はGridViewをバックグラウンドでバインドできないため、私を満たすことができません.しかし、それは1つのDataTableを返すことができて、それからフロントでJSでDataTableの値を取り出して、1行1行GridViewにバインドして、この複雑さ、憂鬱さ、もう1ページのを持ってきたら、もっと面倒になります.
これはネットから見た例で、さっきの状況を説明しています.ここではAjaxProを使用します.dll、Ajaxと.dllの違いは大きくありません.
Htmlコード:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ajaxpro-no-refresh-update-gridview.aspx.cs" Inherits="ajaxpro_no_refresh_update_gridview" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    <title>ajaxpro     gridview  </title>
</head>
<body>
<script type="text/javascript">
    function reload() {
        ajaxpro_no_refresh_update_gridview.GridViewSource(callback);
    }
    function callback(r) {
        var rows = r.value.Rows, tb = document.getElementById('gv1'),tr,td;
        while (tb.rows.length > 1) tb.deleteRow(1); //        ,       
        for (var i = 0; i < rows.length; i++) {
            tr = tb.insertRow(tb.rows.length);
            td = tr.insertCell(0); td.innerHTML = rows[i].Id;
            td = tr.insertCell(1); td.innerHTML = rows[i].rndNum;     //           ,     ,         ,          。
        }
    }
</script> <table id="tb1"></table>
<form id="form1" runat="server"><input type="button" value="    " onclick="reload()"/>
<asp:GridView runat="server" ID="gv1"></asp:GridView>
</form><!--      runat server   ,   ajaxpro                     -->
</body>
</html>

C#バックグラウンドコード:
using System;
using System.Data;
public partial class ajaxpro_no_refresh_update_gridview : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        AjaxPro.Utility.RegisterTypeForAjax(typeof(ajaxpro_no_refresh_update_gridview));
        gv1.DataSource = CreateDataSouce(); gv1.DataBind();   //       Load    GridView,       。       ,   JS       
    }
    private DataTable CreateDataSouce()
    {//     
        DataTable dt = new DataTable();
        dt.Columns.Add("Id");
        dt.Columns.Add("rndNum");
        Random r = new Random();
        for (int i = 0; i < 20; i++) dt.Rows.Add(i, r.Next(1, 1000));
        return dt;
    }
    [AjaxPro.AjaxMethod]
    public DataTable GridViewSource()
    {
        return CreateDataSouce();   //   DataTable   
    }
}