Ajax呼び出しバックグラウンドメソッドのいくつかの書き方(二)Ajax.dll
4884 ワード
プラグインAjaxを使用します.dllまたはAjaxPro.dll.Ajaxを使いました.dll、まずネット上でAjaxをダウンロードする必要があります.dll、次にプロジェクトに参照し、Web.Configでは以下のように構成されています.
システムでWebのノードにこの文を加えると、
ページコード:
JSコード:
C#バックグラウンドコード:
限界:Ajaxを使用する.dllはバックグラウンドを呼び出す上で確かに便利であるが,バックグラウンドでフロントのサーバコントロールに値を割り当てることはできず,バックグラウンドメソッドでのみフロントに値を返し,フロントでJSを介してコントロールに値を与える.
実は本人の目的は1つのこのような機能を試験したいので、フロントのボタンはバックグラウンドの事件の中で他のサーバーのコントロールに値を割り当てることができて、特にGridViewはデータをバインドしますこのようにして、しかしデータの量が多いため、この過程は比較的に遅くて、またフロントで1つの待つマスクのヒントをプラスしたいと思って、データが完全にGridViewにバインドするまで、マスクの層はやっと消えます.これはAjaxを使わなければなりません.
明らかに、上記の方法はGridViewをバックグラウンドでバインドできないため、私を満たすことができません.しかし、それは1つのDataTableを返すことができて、それからフロントでJSでDataTableの値を取り出して、1行1行GridViewにバインドして、この複雑さ、憂鬱さ、もう1ページのを持ってきたら、もっと面倒になります.
これはネットから見た例で、さっきの状況を説明しています.ここではAjaxProを使用します.dll、Ajaxと.dllの違いは大きくありません.
Htmlコード:
C#バックグラウンドコード:
システムで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
}
}