Autor: Dflying Chen ( http://dflying.cnblogs.com/ )
Todas as séries de artigos anteriores chamam diretamente um único serviço da Web. No entanto, no desenvolvimento de projetos reais, especialmente na conversão de projetos existentes, extrair a lógica da página em um serviço da Web especializado geralmente leva a um pouco de trabalho. O Atlas leva isso em consideração e permite adicionar o atributo [WebMethod] ao método público do lado do servidor para permitir chamadas diretas do JavaScript do lado do cliente.
Para permitir que os clientes chamem diretamente métodos definidos em páginas ASPX, você precisa especificar o método como público e adicionar o atributo [WebMethod], como o seguinte método do lado do servidor definido no arquivo ASPX:
<script runat="server">
[WebMethod]
public int AddInt(int int1, int int2)
{
retornar int1 + int2;
}
</script>
No lado do cliente, o Atlas fará um mashup de um método JavaScript AddInt para você, que existe em um namespace especial PageMethods, para que você possa chamar o método acima por meio de PageMethods.AddInt().
Ao mesmo tempo, ao definir o WebMethod na página ASPX, você também pode acessar os valores e ViewState dos controles do lado do servidor em todas as páginas neste método, e o ciclo de vida da página inteira será o mesmo que o PostBack tradicional da página ASP.NET, como Page_Load Todos os outros métodos serão chamados, permitindo-nos ter um acesso mais forte à página. No entanto, isso também traz um desconto de desempenho, porque toda vez que o Método Web é chamado, o ViewState e os valores de controle na página serão passados de volta ao servidor, e o processamento do lado do servidor de todo o ciclo de vida da página será mais longo do que apenas processar um método puro. O método Web definido em ASMX é muito mais complicado. Portanto, aqui eu recomendo usar o Web Service puro tanto quanto possível. Consulte: É recomendado usar o Web Service em vez do método Page na implementação do lado do servidor Atlas.
Vejamos um exemplo. Primeiro, vamos definir o WebMethod em ASPX. Você pode ver que ele não apenas encontra a soma de dois números, mas também acessa o valor do TextBox do lado do servidor em uma página:
<script runat="server. ">
[WebMethod]
string pública AddInt(int int1, int int2)
{
return (int1 + int2).ToString() + string.Format("rnE o texto do TextBox do servidor é '{0}'.", tbServer.Text);
}
</script>
Depois, há o ScriptManager da página. Não há necessidade de adicionar nenhuma referência aqui: <atlas:ScriptManager ID="scriptManager" runat="server" />.
Depois, há duas entradas usadas para inserir o adendo e uma entrada usada para acionar a chamada do servidor:
<input id="value1" type="text" value="1" />
<input id="valor2" type="text" valor="2" />
<input id="btnAdd" type="button" value="Adicionar!" onclick="return btnAdd_onclick()" />
Há também um TextBox do lado do servidor:
<asp:TextBox ID="tbServer" runat="server" Text="Server control"></asp:TextBox>
A última é a chamada JavaScript. Preste atenção ao namespace integrado de PageMethods:
function btnAdd_onclick() {.
PageMethods.AddInt(
$('valor1').valor,
$('valor2').valor,
Ao concluir
);
}
functionOnComplete(resultado)
{
alerta(resultado);
}
Execute-o no navegador, insira dois adendos, depois insira alguns caracteres no TextBox do lado do servidor, clique em Adicionar, você pode ver que o valor do TextBox do lado do servidor foi acessado:
Esta é a transmissão de rede interceptada pelo Fiddler. Você pode ver que ViewState e TextBox são passados de volta para o servidor:
O código fonte deste programa de exemplo pode ser baixado aqui: