Consulte o texto original de Leon.Zhou: http://pfzhou.cnblogs.com/archive/2006/03/31/363342.html
Baixei o código de exemplo e o converti em VB. Mas encontrei alguns pequenos problemas:
Demo1 é normal.
Demo2 falhou ao testar a Linha 22 em AJAX.aspx.vb de acordo com o método de escrita original de Leon. Portanto, modifiquei diretamente a propriedade OnClientClick do button3 no ambiente IDE, consulte a linha 52 do testAJAX.asp. Teste bem-sucedido.
Demo3 não conseguiu adicionar atributos do cliente de acordo com o método original e a linha 20 em testAJAX.aspx.vb não funcionou. Não sei por quê. Então adicionei apenas um button3 para acionar o evento do cliente.
Este é um bom exemplo e vale a pena aprender. Para uma explicação detalhada do princípio, consulte o texto original do autor. Ao testar, adicione <add name="NorthWind" connectionString="...corresponding database connection string..."> no web.config do seu projeto
testAJAX.aspx
1<%@ Page Language="VB" AutoEventWireup="false" CodeFile="testAJAX.aspx.vb" Inherits="testAJAX" %>
2
3<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
4
5<html xmlns=" http://www.w3.org/1999/xhtml " >
6<head id="Head1" runat="servidor">
7 <title>Envio de página ASP.NET 2.0 sem demonstração de atualização</title>
8 <script type="text/javascript" idioma ="javascript">
9 Função CallServer1() função CallServer1(controle de entrada, contexto)
10 {
11 context.innerHTML = "<IMG SRC='images/pie.gif' />Carregando";
12 arg = 'ServerMethod1 |' + inputcontrol.value;
13 <%= ClientScript.GetCallbackEventReference(Me, "arg", "ReceiveServerData1", "context")%>;
14}
15
16 Função ReceiveServerData1()função ReceiveServerData1(resultado, contexto)
17 {
18 context.innerHTML = context.id + ":" + resultado;
19}
20
21 Função CallServer2() função CallServer2(obj)
vinte e dois {
23 contexto = gridspan;
24 context.innerHTML = "<IMG SRC='images/pie.gif' />Dados estão sendo carregados";
25 arg = "ServerMethod2|" + obj.valor;
26 <%= ClientScript.GetCallbackEventReference(Me, "arg", "ReceiveServerData2", "context")%>;
27}
28
29 Função ReceiveServerData2()função ReceiveServerData2(resultado, contexto)
30 {
31 context.innerHTML = resultado;
32}
33
34
35</head>
36<corpo>
37 <form id="form1" runat="servidor">
38
39 <h1>Botão Demo1:html envia dados</h1><br />
40 <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
41 <input id="Button1" type="button" value="Enviar para Label1" onclick="CallServer1(TextBox1, Label1)"/>
42 <input id="Button2" type="button" value="Enviar para Label2" onclick="CallServer1(TextBox1, Label2)"/>
43<br />
44 <asp:Label ID="Label1" runat="server" Text="Label1:"></asp:Label>
45<br />
46 <asp:Label ID="Label2" runat="server" Text="Label2:"></asp:Label>
47
48 <h/>
49
50 <h1>Demo2: botão Servidor envia dados</h1><br />
51 <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
52 <asp:Button ID="Button3" runat="server" Text="Button" OnClientClick="CallServer1(TextBox2, Label3);return false;"
53 <asp:Label ID="Label3" runat="server" Text="Label3:"></asp:Label></div>
54 <h/>
55
56 <h1>Demo3: Vinculando dados entre caixa de listagem suspensa e gridview</h1><br />
57 <asp:SqlDataSource ID="SqlDataSource1" runat="servidor" ConnectionString="<%$ connectionStrings:NorthWind %>"
58 SelectCommand="selecionar distinto(país) dos clientes"></asp:SqlDataSource>
59 <asp:SqlDataSource ID="SqlDataSource2" runat="servidor" ConnectionString="<%$ connectionStrings:NorthWind %>"
60 SelectCommand="selecione ID do cliente, nome da empresa, país dos clientes onde país=@País ">
61 <Selecionar Parâmetros>
62 <asp:ControlParameter Name="Country" ControlID="DropDownList1" PropertyName="SelectedValue" />
63 </SelectParameters>
64 </asp:SqlDataSource>
65
66 <asp:DropDownList ID="DropDownList1" runat="servidor" Width="239px"
67 DataSourceID="SqlDataSource1" DataTextField="País" DataValueField="País">
68 </asp:DropDownList>
69 <input id="Button4" type="button" value="Atualizar" onclick="CallServer2(DropDownList1)"/>
70
71
72 <span id="gridspan">
73 <asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource2" CellPadding="4" ForeColor="#333333" GridLines="None">
74 <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
75 <RowStyle BackColor="#FFFBD6" ForeColor="#333333" />
76 <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
77 <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
78 <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
79 <AlternatingRowStyle BackColor="Branco" />
80 </asp:GridView>
81 </span>
82
83 </form>
84</corpo>
85</html>
86
testeAJAX.aspx.vb
1
2Sistema de Importação
3Importa dados do sistema
4Importa Sistema.Configuração
5Importa Sistema.Web
6Importa System.Web.Security
7Importa System.Web.UI
8Importa System.Web.UI.WebControls
9Importa System.Web.UI.WebControls.WebParts
10Importa System.Web.UI.HtmlControls
11Importa Sistema.IO
12Sistema de Importações.Globalização
13
14Teste de classe pública parcialAJAXTeste de classeAJAX
15 Herda System.Web.UI.Page
16 Implementa ICallbackEventHandler
17 Sub Page_Load Protegido()Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
18 'Registrar método de processamento de eventos do cliente
19 'Parece que esta frase não funcionou, então adicionei um botão adicional4 para acionar o evento do cliente por AndyDavis
20 DropDownList1.Attributes.Add("onchange", "CallServer2(this)")
21 'O evento do cliente do Button3 pode ser definido diretamente na propriedade OnClientClick no IDE, não há necessidade de adicioná-lo aqui por AndyDavis
22 'Button3.Attributes.Add("onclick", "CallServer1(TextBox2, Label3);return false;")
23 Fim Sub
vinte e quatro
25 Servidor privadoReturn As String
26
27 Função pública GetCallbackResult()Função GetCallbackResult() como string implementa ICallbackEventHandler.GetCallbackResult
28 'Para facilitar a visualização do efeito de carregamento, adicione um atraso
29 Sistema.Threading.Thread.Sleep(2000)
30
31 Dim parts() As String = serverReturn.Split("|"c)
32 'Chama de acordo com o nome do método passado e passa os parâmetros correspondentes Atualmente apenas um parâmetro é suportado.
33 Retornar CStr([GetType]().GetMethod(parts(0)).Invoke(Me, New Object() {partes(1)}))
34 Função Final
35
36
37 Public Sub RaiseCallbackEvent()Sub RaiseCallbackEvent(ByVal eventArgument As String) Implementa ICallbackEventHandler.RaiseCallbackEvent
38 serverReturn = eventArgument
39 Fim Sub
40
41 'De acordo com o nome do país em inglês ou abreviatura transmitida pelo cliente, traduza-o para o nome do país chinês correspondente
42 Função Pública ServerMethod1()Função ServerMethod1(ByVal arg As String) As String
43 Dim s As String = ""
44 Selecione Caso arg.ToLower()
45 Caso "cn"
46 Caso "porcelana"
47s = "China"
48 Sair da seleção
49 Caso “nós”
50s = "Estados Unidos"
51 Sair da seleção
52 caso mais
53 s = “País desconhecido”
54 Sair da seleção
55 Seleção final
56 Devoluções
57 Função Final
58
59 'Atualiza o conteúdo do GridView com base no valor passado do cliente, e retorna o html do GridView atualizado
60 Função Pública ServerMethod2()Função ServerMethod2(ByVal arg As String) As String
61 DropDownList1.SelectedValue = arg
62 GridView1.DataBind()
63
64 Retornar RenderControl (GridView1)
65 Função Final
66
67 Sobrecargas Privadas Função RenderControl()Função RenderControl(ByVal control As Control) As String
68 Dim escritor1 As StringWriter = New StringWriter(CultureInfo.InvariantCulture)
69 Dim escritor2 As HtmlTextWriter = Novo HtmlTextWriter(escritor1)
70
71 controle.RenderControl(writer2)
72 escritor2.Flush()
73 escritor2.Close()
74
75 Retornar escritor1.ToString()
76 Função Final
77Fim da aula
78