Introdução
Ao desenvolver aplicações web em C#, é comum embutir recursos, como arquivos JavaScript, em sua montagem. No entanto, quando seu JavaScript precisa referenciar ativos estáticos adicionais, como imagens, pode se tornar complicado gerenciar essas referências corretamente. Você pode se perguntar como tokenizar referências a esses recursos para que possam ser usadas de forma integrada em seu código JavaScript.
Neste post do blog, abordaremos esse problema mostrando como gerenciar dinamicamente as referências de recursos embutidos de maneira estruturada.
O Desafio
Você tem arquivos JavaScript que estão embutidos em sua montagem e, tipicamente, você os adiciona às suas páginas usando ClientScriptManager.GetWebResourceUrl()
. No entanto, a referência a outros ativos estáticos, como imagens, requer uma abordagem mais refinada.
Por exemplo, em vez de usar diretamente uma URL de imagem:
this.drophint = document.createElement('img');
this.drophint.src = '/_layouts/images/dragdrophint.gif';
Você deseja convertê-la em um formato mais escalável, como:
this.drophint = document.createElement('img');
this.drophint.src = '{resource:assembly.location.dragdrophint.gif}';
Então, como você consegue isso? A resposta está em usar um array associativo dinâmico em JavaScript para armazenar URLs de recursos no lado do servidor e referenciá-las no lado do cliente.
A Solução
Passo 1: Criar um Array Dinâmico em JavaScript
Para gerenciar dinamicamente suas URLs de recursos, você pode criar um array associativo que armazena os caminhos dos seus recursos embutidos. Aqui está como você pode fazer isso em seu código do lado do servidor:
Exemplo de Código do Lado do Servidor
StringBuilder script = new StringBuilder();
script.Append("var imgResources = {};");
script.AppendFormat("imgResources['{0}'] = '{1}';",
"drophint",
Page.ClientScript.GetWebResourceUrl(Page.GetType(), "assembly.location.dragdrophint.gif"));
script.AppendFormat("imgResources['{0}'] = '{1}';",
"anotherimg",
Page.ClientScript.GetWebResourceUrl(Page.GetType(), "assembly.location.anotherimg.gif"));
Page.ClientScript.RegisterClientScriptBlock(
Page.GetType(),
"imgResources",
script.ToString(),
true);
Explicação
- StringBuilder: Um objeto StringBuilder é usado para construir eficientemente o código JavaScript.
- Array Associativo: Criamos uma variável chamada
imgResources
que conterá as URLs das nossas imagens. - GetWebResourceUrl(): Este método recupera a URL para os recursos embutidos que você especificou, permitindo que você armazene essas URLs no array.
Passo 2: Referenciar os Recursos no Código do Lado do Cliente
Com o array dinâmico em JavaScript em vigor, você pode facilmente referenciar suas imagens no código do lado do cliente assim:
Exemplo de Código do Lado do Cliente
this.drophint = document.createElement('img');
this.drophint.src = imgResources['drophint'];
this.anotherimg = document.createElement('img');
this.anotherimg.src = imgResources['anotherimg'];
Benefícios
- Escalabilidade: Adicione facilmente mais recursos sem sobrecarregar seus arquivos JavaScript.
- Gerenciabilidade: Mantenha um único ponto de referência para URLs, tornando as atualizações perfeitas.
- Carregamento Dinâmico: Certifique-se de que seus ativos sejam carregados com base nos recursos embutidos na montagem.
Conclusão
Estruturando sua abordagem para referenciar recursos embutidos em suas aplicações web C# usando um array associativo dinâmico em JavaScript, você pode simplificar o processo de gerenciamento de URLs de ativos estáticos. Este método não apenas melhora a manutenibilidade, mas também aumenta a escalabilidade de sua aplicação.
Implementar essa solução não só economiza seu tempo, mas também prepara seu código para futuras atualizações e modificações de forma tranquila.
Boas codificações!