Panggilan balik klien Asp.Net2.0 adalah metode yang sangat menarik. Ini memungkinkan kita mengontrol data apa yang akan dikirimkan ke server tanpa mengirimkan seluruh halaman .seluruh halaman.
Pertama-tama, kita harus membicarakan metode yang sangat penting: GetCallbackEventRefernce. Saya menuliskan pemahaman saya. Ini mungkin salah.
GetCallbackEventReference pertama-tama mengimplementasikan metode RaiseCallbackEvent yang memungkinkan skrip klien meneruskan parameter ke server, dan kemudian mengembalikan nilai metode RaiseCallBackEvent ke parameter yang Anda daftarkan dalam metode GetCallbackEventRefernce (sebenarnya ini juga merupakan skrip yang ingin Anda tulis di klien ). Untuk memanggil GetCallbackEventRefernce, Anda harus meneruskan dua parameter dari skrip klien, satu adalah nilai yang akan diteruskan ke acara RaiseCallbackEvent, dan yang lainnya adalah konteks.
Arti dari parameternya adalah sebagai berikut:
Pertama: halaman atau server mengontrol itu mengimplementasikan antarmuka ICallbackEventHandler, Tulis ini untuk mewakili halaman sebelumnya.
Yang kedua: mewakili nilai yang ingin Anda teruskan dari klien ke metode RaiseCallbackEvent server.
Yang ketiga: fungsi js yang ingin Anda tulis di klien. Pada saat yang sama, server juga akan meneruskan data terhitung ke fungsi ini sebagai parameter fungsi ini.
Keempat: Saya tidak tahu persis apa yang dimaksud dengan konteks. Kode yang dikirim GetCallbackEventRefernce ke klien adalah sebagai berikut:
WebForm_DoCallback('__Page',arg,ReceiveServerData,context,null,false)
Jadi apa yang harus kita lakukan untuk mendapatkan permintaan dari klien? Bagaimana cara meneleponnya? Saya melihat tiga metode:
Yang pertama: tulis string publik di latar belakang dan tetapkan di Page_Load: =Page.ClientScript.GetCallbackEventReference(this, "message", "ShowServerTime", "context"); .ClientScrip, karena akan mengembalikan ClientScriptManager, yang mengelola semua skrip klien. Kemudian pada event onclick tombol di latar depan <%=string latar belakang publik itu%> Buatlah kode percobaan kecil sebagai berikut:
Frontend ServerTime.aspx: Untuk kenyamanan, hapus banyak html yang tidak berguna
<%@ page Language=" C#" CodeFile="ServerTime.aspx.cs" Inherits="ServerTime_aspx" %>
<html>
<kepala>
<judul>Waktu Server</judul>
<script bahasa = "javascript">
fungsi GetServerTime ()
{
var pesan = '';
var konteks = '';
<%=sCallBackFunctionInvocation%>
}
fungsi ShowServerTime(timeMessage, konteks) {
alert('Waktu saat ini di server adalah:n' + timeMessage);
}
</skrip>
</kepala>
<tubuh>
<form id="MainForm" runat="server">
<input type="button" value="Dapatkan waktu server" onclick="GetServerTime();" />
</bentuk>
</badan>
</html>
Backend:
menggunakan Sistem;
menggunakan System.Web.UI;
kelas parsial publik ServerTime_aspx : Halaman,ICallbackEventHandler
{
//Pastikan untuk mengimplementasikan ICallbackEventHandler alasan string publik sCallBackFunctionInvocation;
void Page_Load(pengirim objek, System.EventArgs e)
{
sCallBackFunctionInvocation = Page.ClientScript.GetCallbackEventReference(ini, "pesan", "ShowServerTime", "konteks");
}
string publik RaiseCallbackEvent(string eventArgument)
{
return DateTime.Sekarang.ToString();
}
}
Jalankan, klik tombol tersebut dan hasilnya sebagai berikut:
Cara Kedua: Pada cara di atas kita harus mengikat background ke latar depan, lalu bagaimana jika kita tidak mengikatnya? Kami melakukan ini:
langsung menggunakan GetCallbackEventReference sebagai konten implementasi dalam fungsi js, lalu daftarkan fungsi js ini ke klien.
Kode Halaman Pengujian ujung depan:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TestPage.aspx.cs" Inherits="TestPage" %>
<html>
<kepala>
<judul>Halaman Tanpa Judul</judul>
<skrip tipe="teks/javascript">
tes fungsi()
{
var lb = document.getElementById("Pilih1");
//Kotak drop-down yang akan diambil var con = lb.options[lb.selectedIndex].text;
//Dapatkan teks dari kotak drop-down yang Anda pilih dan kemudian panggil CallTheServer, yang merupakan output fungsi js oleh server CallTheServer(con,'');
}
fungsiReceiveServerData(rValue)
{
Hasil.innerHTML = rValue;
}
</skrip>
</kepala>
<tubuh>
<form id="form1" runat="server">
<div>
<pilih id="Pilih1">
<nilai opsi=1 dipilih="dipilih">Murid Tikus</option>
<nilai opsi=2>Master Wu Qiwa</opsi>
</pilih>
<br />
<br />
<input onclick="test()" value="Kembalikan teks kotak drop-down dari server" type=button>
<br />
<br />
<span ID="Hasil"></span>
<br />
</div>
</bentuk>
</badan>
</html>
Kode backend:
menggunakan Sistem;
menggunakan Sistem.Data;
menggunakan Sistem.Konfigurasi;
menggunakan Sistem.Koleksi;
menggunakan Sistem.Web;
menggunakan Sistem.Web.Keamanan;
menggunakan Sistem.Web.UI;
menggunakan Sistem.Web.UI.WebControls;
menggunakan System.Web.UI.WebControls.WebParts;
menggunakan System.Web.UI.HtmlControls;
kelas parsial publik TestPage : System.Web.UI.Page,System.Web.UI.ICallbackEventHandler
{
dilindungi kekosongan Page_Load (pengirim objek, EventArgs e)
{
String cbReference = Page.ClientScript.GetCallbackEventReference(ini, "arg", "ReceiveServerData", "konteks");
Skrip panggilan balik string;
callbackScript = "fungsi CallTheServer(arg,konteks)" +"{ " + cbReference + "} ;";
Halaman.ClientScript.RegisterStartupScript(this.GetType(),"abcdefg",callbackScript, true);
//Parameter keempat mewakili apakah akan menambahkan tag <script type="text/javascript"></script> secara otomatis ke skrip, tentu saja harus ditambahkan}
String publik RaiseCallbackEvent (String eventArgument)
{
return "Apa yang Anda pilih adalah" + eventArgument;
}
}
Berikut hasil eksekusinya:
Tipe ketiga: Dua yang pertama adalah kontrol HTML dengan <input type="button", lalu bagaimana jika itu adalah tombol server? Tentu saja, Anda juga dapat menambahkan atribut onclick pada tombol server di latar belakang.
Kode third.aspx ujung depan:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="third.aspx.cs" Inherits="third" %>
<html>
<kepala>
<judul>Halaman Tanpa Judul</judul>
</kepala>
<tubuh>
<form id="form1" runat="server">
<div>
<pilih id="Pilih1">
<optionselect="selected" value=1>Murid Tikus</option>
<nilai opsi=2>Master Wu Qiwa</opsi>
</pilih>
<asp:Button ID="Button1" runat="server" Text="Ini adalah tombol server" /></div>
<div id="div1" />
<skrip tipe="teks/javascript">
fungsiRe(ret)
{
document.getElementById("div1").innerHTML = ret;
waspada(mundur);
}
</skrip>
</bentuk>
</badan>
</html>
Kode di belakang:
menggunakan Sistem;
menggunakan Sistem.Data;
menggunakan Sistem.Konfigurasi;
menggunakan Sistem.Koleksi;
menggunakan Sistem.Web;
menggunakan Sistem.Web.Keamanan;
menggunakan Sistem.Web.UI;
menggunakan Sistem.Web.UI.WebControls;
menggunakan System.Web.UI.WebControls.WebParts;
menggunakan System.Web.UI.HtmlControls;
kelas parsial publik ketiga : System.Web.UI.Page,System.Web.UI.ICallbackEventHandler
{
dilindungi kekosongan Page_Load (pengirim objek, EventArgs e)
{
//Parameter keempat adalah null, karena Anda tidak dapat lagi meneruskan parameter ke parameter tersebut di js string str = Page.ClientScript.GetCallbackEventReference(this,"document.getElementById('Select1')._
options[document.getElementById('Select1').selectedIndex].text","Re",null);
//return false adalah untuk mencegah formulir dikirimkan. Button1.Attributes.Add("onclick",str+";return false;");
}
Anggota #region ICallbackEventHandler
string publik RaiseCallbackEvent(string eventArgument)
{
if (eventArgument == "Magang Tikus")
{
return "Magang tikus: Hidup itu seperti tikus. Jika Anda tidak berada di gudang, Anda berada di toilet!";
}
kalau tidak
{
kembalikan "Master Wu Qiwa: percaya diri, mandiri, optimis";
}
}
#wilayah akhir
}
Sedikit tip, setelah Anda selesai menulis System.Web.UI.ICallbackEventHandler, gerakkan mouse ke atas, dan akan ada grafik kecil di depan System. Klik di atasnya untuk secara otomatis menulis kode RaiseCallbackEvent. Efeknya adalah sebagai berikut;
Yang ketiga terasa paling buruk!