Chamar a function ASP.NET do JavaScript?

Eu estou escrevendo uma página da web no asp.net. Eu tenho um código JavaScript e tenho um botão de envio com um evento de clique.

É possível chamar um método que criei em ASP com o evento click do JavaScript?

Bem, se você não quiser fazer isso usando o Ajax ou qualquer outra forma e apenas desejar que um postback normal do ASP.NET aconteça, aqui está como você faz isso (sem usar nenhuma outra biblioteca):

É um pouco complicado embora … 🙂

Eu. No seu arquivo de código (supondo que você esteja usando C # e .NET 2.0 ou posterior), adicione a seguinte Interface à sua class Page para que pareça

public partial class Default : System.Web.UI.Page, IPostBackEventHandler{} 

ii. Isso deve adicionar (usando TabTab ) essa function ao seu arquivo de código:

 public void RaisePostBackEvent(string eventArgument) { } 

iii. Em seu evento onclick em JavaScript, escreva o seguinte código:

 var pageId = '<%= Page.ClientID %>'; __doPostBack(pageId, argumentString); 

Isso chamará o método ‘RaisePostBackEvent’ no seu arquivo de código com o ‘eventArgument’ como o ‘argumentString’ que você passou do JavaScript. Agora você pode ligar para qualquer outro evento que desejar.

PS: Isso é ‘sublinhado-sublinhado-doPostBack’ … E, não deve haver espaço nessa sequência … De alguma forma, o WMD não me permite escrever em sublinhados seguidos por um personagem!

O método __doPostBack() funciona bem.

Outra solução (muito hackish) é simplesmente adicionar um botão ASP invisível em sua marcação e clicar nele com um método JavaScript.

 

Do seu JavaScript, recupere a referência para o botão usando seu ClientID e, em seguida, chame o método .click () nele.

 var button = document.getElementById(/* button client id */); button.click(); 

A biblioteca Microsoft AJAX fará isso. Você também pode criar sua própria solução que envolva o uso de AJAX para chamar seus próprios arquivos de script aspx (basicamente) para executar funções .NET.

Eu sugiro a biblioteca Microsoft AJAX. Uma vez instalado e referenciado, basta adicionar uma linha no seu carregamento de página ou no init:

 Ajax.Utility.RegisterTypeForAjax(GetType(YOURPAGECLASSNAME)) 

Então você pode fazer coisas como:

  _ Public Function Get5() AS Integer Return 5 End Function 

Então, você pode chamá-lo em sua página como:

 PageClassName.Get5(javascriptCallbackFunction); 

O último parâmetro da sua chamada de function deve ser a function de retorno de chamada do javascript que será executada quando a solicitação do AJAX for retornada.

Você pode fazê-lo de forma assíncrona usando o .NET Ajax PageMethods. Veja aqui ou aqui .

Programação estática e fortemente tipada sempre me pareceu muito natural, então no começo eu resisti a aprender JavaScript (para não mencionar HTML e CSS) quando tive que construir front-ends baseados na web para meus aplicativos. Eu faria qualquer coisa para contornar isso como redirect para uma página apenas para executar e ação no evento OnLoad, contanto que eu pudesse codificar C # puro.

No entanto, você descobrirá que, se estiver trabalhando com sites, precisará ter a mente aberta e começar a pensar mais na Web (ou seja, não tente fazer as coisas do lado do cliente no servidor e vice-versa). . Eu adoro as webforms da ASP.NET e ainda usá-las (assim como MVC ), mas vou dizer que tentando simplificar as coisas e escondendo a separação de cliente e servidor pode confundir os recém-chegados e acabar tornando as coisas mais difíceis às vezes .

Meu conselho é aprender alguns JavaScript básicos (como registrar events, recuperar objects DOM, manipular CSS, etc.) e você vai achar a programação da web muito mais agradável (para não mencionar mais fácil). Muitas pessoas mencionaram diferentes bibliotecas Ajax, mas eu não vi nenhum exemplo real do Ajax, então aqui vai. (Se você não estiver familiarizado com o Ajax, tudo o que ele é é fazer uma solicitação HTTP assíncrona para atualizar o conteúdo (ou talvez executar uma ação do lado do servidor em seu cenário) sem recarregar a página inteira ou fazer uma postagem completa.

Lado do cliente:

  

É isso aí. Embora o nome possa ser enganoso, o resultado pode ser em texto simples ou JSON, você não está limitado a XML. O jQuery fornece uma interface ainda mais simples para fazer chamadas Ajax (entre outras tarefas de JavaScript).

A solicitação pode ser um HTTP-POST ou HTTP-GET e não precisa estar em uma página da Web, mas você pode postar em qualquer serviço que ouça solicitações HTTP, como uma API RESTful . A API da Web da ASP.NET MVC 4 torna a configuração do serviço da web do lado do servidor para lidar com a solicitação também. Mas muitas pessoas não sabem que você também pode adicionar controladores de API ao projeto de formulários web e usá-los para lidar com chamadas Ajax como esta.

Lado do servidor:

 public class DataController : ApiController { public HttpResponseMessage Get() { HttpResponseMessage response = new HttpResponseMessage( Repository.Get(true), new MediaTypeHeaderValue("application/json") ); return response; } } 

Global.asax

Em seguida, basta registrar a rota HTTP em seu arquivo Global.asax, para que o ASP.NET saiba como direcionar a solicitação.

 void Application_Start(object sender, EventArgs e) { RouteTable.Routes.MapHttpRoute("Service", "api/{controller}/{id}"); } 

Com o AJAX e Controladores, você pode postar de volta no servidor a qualquer momento de forma assíncrona para executar qualquer operação no lado do servidor. Esse one-two punch fornece a flexibilidade do JavaScript e o poder do C # / ASP.NET, proporcionando às pessoas que visitam seu site uma experiência geral melhor. Sem sacrificar nada, você obtém o melhor dos dois mundos.

Referências

  • Ajax ,
  • jQuery Ajax ,
  • Controlador em Webforms

A biblioteca Microsoft AJAX fará isso. Você também pode criar sua própria solução que envolva o uso de AJAX para chamar seus próprios arquivos de script aspx (basicamente) para executar funções .NET.

Esta é a biblioteca chamada AjaxPro, que foi escrita por um MVP chamado Michael Schwarz . Esta foi a biblioteca não foi escrita pela Microsoft.

Eu usei o AjaxPro extensivamente, e é uma biblioteca muito legal, que eu recomendaria para callbacks simples para o servidor. Funciona bem com a versão Microsoft do Ajax sem problemas. No entanto, eu diria que, com a facilidade com que a Microsoft criou o Ajax, só o utilizaria se fosse realmente necessário. É preciso muito JavaScript para fazer algumas funcionalidades realmente complicadas que você obtém da Microsoft simplesmente soltando-as em um painel de atualização.

Acho blog Como buscar e mostrar dados do database do SQL Server na página ASP.NET usando Ajax (jQuery) irá ajudá-lo.

Código JavaScript

   

Função do lado do servidor ASP.NET

 [WebMethod] [ScriptMethod(ResponseFormat= ResponseFormat.Json)] public static List GetCompanies() { System.Threading.Thread.Sleep(5000); List allCompany = new List(); using (MyDatabaseEntities dc = new MyDatabaseEntities()) { allCompany = dc.TopCompanies.ToList(); } return allCompany; } 

É tão fácil para ambos os cenários (isto é, síncrono / asynchronous) se você deseja acionar um manipulador de events do lado do servidor, por exemplo, o evento click do Button.

Para acionar um manipulador de events de um controle: Se você já adicionou um ScriptManager à sua página, ignore a etapa 1.

  1. Adicione o seguinte na sua seção de script de cliente da página

     // 
    1. Escreva o manipulador de events do lado do servidor para o seu controle

      protegido void btnSayHello_Click (remetente do object, EventArgs e) {Label1.Text = “Hello World …”; }

    2. Adicionar uma function de cliente para chamar o manipulador de events do lado do servidor

      function SayHello () {__doPostBack (“btnSayHello”, “”); }

Substitua o “btnSayHello” no código acima com o ID do cliente do seu controle.

Ao fazer isso, se o controle estiver dentro de um painel de atualização, a página não será atualizada. Isso é tão fácil.

Uma outra coisa a dizer é que: Tenha cuidado com o ID do cliente, porque depende da sua política de geração de ID definida com a propriedade ClientIDMode.

Você pode querer criar um serviço da Web para seus methods comuns.
Basta adicionar um WebMethodAttribute sobre as funções que você deseja chamar, e é sobre isso.
Ter um serviço da web com todas as suas coisas comuns também torna o sistema mais fácil de manter.

Se a function __doPostBack não for gerada na página, você precisará inserir um controle para forçá-lo desta forma:

  

A respeito de:

 var button = document.getElementById(/* Button client id */); button.click(); 

Deve ser como:

 var button = document.getElementById('<%=formID.ClientID%>'); 

Onde formID é o ID de controle do ASP.NET no arquivo .aspx.

Estou tentando implementar isso, mas não está funcionando direito. A página está postando de volta, mas meu código não está sendo executado. Quando eu depurar a página, o RaisePostBackEvent nunca é acionado. Uma coisa que fiz diferente é que estou fazendo isso em um controle de usuário em vez de uma página aspx.

Se alguém é como Merk, e tem problemas em vir isso, eu tenho uma solução:

Quando você tem um controle de usuário, parece que você também deve criar o PostBackEventHandler na página pai. E então você pode chamar o PostBackEventHandler do controle de usuário chamando-o diretamente. Ver abaixo:

 public void RaisePostBackEvent(string _arg) { UserControlID.RaisePostBackEvent(_arg); } 

Onde UserControlID é o ID que você forneceu ao controle de usuário na página pai quando você aninhou-o na marcação.

Nota: Você também pode simplesmente chamar methods pertencentes a esse controle de usuário diretamente (nesse caso, você precisaria apenas do manipulador RaisePostBackEvent na página pai):

 public void RaisePostBackEvent(string _arg) { UserControlID.method1(); UserControlID.method2(); } 

Adicione esta linha ao carregamento da página se você estiver recebendo o erro esperado do object.

 ClientScript.GetPostBackEventReference(this, ""); 

Você pode usar o PageMethods.Your C# method Name para acessar methods C # ou methods VB.NET em JavaScript.

Tente isto:

 if(!ClientScript.IsStartupScriptRegistered("window")) { Page.ClientScript.RegisterStartupScript(this.GetType(), "window", "pop();", true); } 

Ou isto

 Response.Write(""); 

Use a propriedade OnClientClick do botão para chamar funções JavaScript …

Você também pode obtê-lo apenas adicionando esta linha no seu código JavaScript:

 document.getElementById('<%=btnName.ClientID%>').click() 

Eu acho que isso é muito fácil!

Por favor tente isto:

 <%= Page.ClientScript.GetPostBackEventReference(ddlVoucherType, String.Empty) %>; 

ddlVoucherType é um controle que a mudança de índice selecionada irá chamar … E você pode colocar qualquer function na mudança de índice selecionada deste controle.

A maneira mais simples e melhor de conseguir isso é usar o evento JavaScript onmouseup() vez de onclick()

Dessa forma, você irá triggersr o JavaScript depois de clicar e não interferirá no evento ASP OnClick() .

Eu tentei isso e assim eu poderia executar um método Asp.Net ao usar jQuery.

  1. Fazer um redirecionamento de página no seu código jQuery

     window.location = "Page.aspx?key=1"; 
  2. Em seguida, use uma string de consulta no carregamento da página

     protected void Page_Load(object sender, EventArgs e) { if (Request.QueryString["key"] != null) { string key= Request.QueryString["key"]; if (key=="1") { // Some code } } } 

Portanto, não há necessidade de executar um código extra

Esta resposta funciona como uma brisa para mim graças cross browser:

O método __doPostBack () funciona bem.

Outra solução (muito hackish) é simplesmente adicionar um botão ASP invisível em sua marcação e clicar nele com um método JavaScript.

 

A partir do seu JavaScript, recupere a referência ao botão usando seu ClientID e, em seguida, chame o método .Click ():

 var button = document.getElementByID(/* button client id */); button.Click(); 

Bloco de citação