Estou procurando a maneira mais eficiente / padrão de transmitir dados entre o código JavaScript do lado do cliente e o código C # atrás de um aplicativo ASP.NET. Eu tenho usado os seguintes métodos para conseguir isso, mas todos eles se sentem um pouco enganados.
Para passar dados do JavaScript para o código C # é definindo variáveis ASP ocultas e acionando uma postagem:
<asp:HiddenField ID="RandomList" runat="server" />
function SetDataField(data) {
document.getElementById('<%=RandomList.ClientID%>').value = data;
}
Então, no código C #, coleciono a lista:
protected void GetData(object sender, EventArgs e)
{
var _list = RandomList.value;
}
Voltando à outra maneira, costumo usar o ScriptManager para registrar uma função e transmitir dados durante o Page_Load:
ScriptManager.RegisterStartupScript(this.GetType(), "Set","get("Test();",true);
ou adiciono atributos aos controles antes de uma postagem de retorno ou durante os estágios de inicialização ou pré-renderização:
Btn.Attributes.Add("onclick", "DisplayMessage("Hello");");
Esses métodos me serviram bem e fazem o trabalho, mas simplesmente não parecem completos. Existe uma maneira mais padrão de transmitir dados entre o JavaScript do lado do cliente e o código de back-end em C #?
Eu já vi alguns posts como este que descrevem a classe HtmlElement; isso é algo que eu deveria procurar?
fonte
Respostas:
Você pode simplesmente e facilmente chamar um método de página estática do JavaScript, como neste exemplo . Se você precisar chamar o método de várias páginas, poderá configurar um serviço da Web e chamá-lo de Javascript da mesma maneira. Exemplo também incluído abaixo.
Código .aspx
Code-behind Code
Código Javascript
NOTA: Os métodos da página devem ser estáticos. Isso pode ser problemático para você, dependendo do que o aplicativo está tentando fazer. No entanto, se as informações se basearem na sessão e você estiver usando algum tipo de autenticação interna, poderá colocar um atributo EnableSession no decorador WebMethod e permitir que você acesse HttpContext.Current.User, Sessão, etc.
fonte
Eu recomendo dar uma olhada no jQuery. O JQuery pode ser usado para fazer chamadas AJAX de volta ao servidor, que pode retornar os dados no formato que você precisar - um bom formato pode ser JSON, pois pode ser usado diretamente em javascript.
Para extrair dados do servidor para javascript usando jQuery , as buscas a seguir fazem uma solicitação assíncrona para http://youserver.com/my/uri e recebem os dados do servidor na função fornecida.
O envio de dados de javascript para o servidor funciona da mesma forma:
fonte
A Microsoft implementou o
UpdatePanel
controle para executar o ajax, de modo que essa é sem dúvida a maneira "padrão". No entanto, eu não recomendaria pessoalmente usá-lo, pois ele não tem nem perto do rico conjunto de recursos e controle que você tem ao usar o JavaScript diretamente.É assim que eu pessoalmente faço:
Crie campos ocultos para quaisquer valores do lado do cliente que você deseja usar em uma postagem de página padrão (ou seja, quando o usuário clicar em Enviar)
No código por trás, registre os controles que você deseja usar no lado do cliente.
Use uma biblioteca javascript * para fazer sua publicação / obtenção do ajax e, em seguida, use JavaScript para atualizar a página com base na resposta
Escreva uma página "ajax" separada que substitua o método de renderização para fazer o trabalho.
* Existem muitas bibliotecas para você escolher, você pode até criar suas próprias. Eu recomendaria o jQuery , é estável e possui um amplo conjunto de recursos.
fonte
JSON é a melhor maneira de realizar a tarefa. Não olhe para o problema como uma passagem entre "C # e JavaScript". Esse modo de pensar leva a códigos estranhos, como o que você tem na postagem original.
De maneira mais geral, é apenas passar objetos entre o cliente e o servidor de uma maneira independente da linguagem. O JSON é excelente para a tarefa porque é amplamente suportado e fácil de ler.
fonte
Para definir uma marca de entrada que não precise de asp no servidor, você pode usar: (ou <% #%> para vinculação de formulários)
html:
controle asp:
para obter os valores no postback
Se o seu, asp controlar a entrada oculta, você pode usar
A parte interessante do Request.Form é que, se você tiver várias tags com o mesmo atributo "name", ele retornará o resultado em CSV.
fonte