Modelo mínimo de scripts para compreender as chamadas e o processamento de páginas em ASP.NET.
Primeiramente é preciso associar no servidor IIS (de preferência acima de 7.0) um usuário ao ASP.NET. Este é o usuário que será responsável pelas requisições ASP.NET. Em seguida, é preciso ajustar as propriedades do diretório virtual no IIS para que ele aceite as chamadas ASP.NET. Isto é feito associando este usuário ao diretório físico (pelo Windows Explorer).
Modelo
Diferentemente do ASP clássico, no .NET o programador tem que se preocupar com as bibliotecas a serem carregadas, dependendo dos comandos utilizados. A primeira e mais importante é a "System.IO", cujo nome já sugere que ela é responsável pelas entradas e saídas (Request, Response, entrada e saída para arquivo).
Não existem instruções soltas pelo código. Todas precisam estar dentro de eventos (Sub).
Todas as variáveis tem que ser declaradas através da instrução Dim.
Algumas bibliotecas mais importantes:
System.Data - Base das funções que manipulam o modelo ADO (Acesso a dados)
System.Data.Common - Funções comuns da camada de dados do ADO
System.Data.Odbc - Funções do ADO que manipulam ODBC
System.Data.OleDb - Funções do ADO que manipulam OLEDB
System.Net.Mail - Funções para uso do modelo SMTP (email)
System.Numerics - Complementa os tipos numéricos default do ASP.NET
System.Text - Funções que manipulam ASC e UNICODE
System.Web - Fornecem os elementos dos objetos HTTPRequest e HTTPResponse
System.Windows.Forms - Encapsulamento dos controles visuais Windows
System.Windows.Forms.Design - Suporte à configuração de controles visuais no momento de projeto
Programação com Scripts para Web
Blog da Rede Blogazine
Conteúdos com Pesquisa e Revisão
terça-feira, 23 de outubro de 2012
Redirecionamento de página em ASP
Certas checagens de parâmetros, senhas, variáveis de sessão e outros, são necessárias antes de mostrar uma página. Uma vez feitas estas checagens, é feito um REDIRECIONAMENTO para a página que realmente corresponde à tarefa em si.
A seguir, um modelo de redirecionamento
<%
Ip1 = "10.1."
Ip2 = "10.3."
IPdoCliente = Request.ServerVariables("REMOTE_ADDR")
Response.write IPdoCliente
if left(IPdoCliente,5) = Ip1 or left(IPdoCliente,5) = Ip2 then
Response.redirect "http://servidor/diretorio_virtual_Web/Pagina.htm"
else
Response.write "<H2>IP inválido para visualização da página.</H2>"
end if
%>
Neste caso, o programador condicionou o redirecionamento a dois tipos de endereço IP correspondentes às subredes de sua empresa. Do contrário, aparecerá a mensagem de que o IP é inválido para visualização.
A seguir, um modelo de redirecionamento
<%
Ip1 = "10.1."
Ip2 = "10.3."
IPdoCliente = Request.ServerVariables("REMOTE_ADDR")
Response.write IPdoCliente
if left(IPdoCliente,5) = Ip1 or left(IPdoCliente,5) = Ip2 then
Response.redirect "http://servidor/diretorio_virtual_Web/Pagina.htm"
else
Response.write "<H2>IP inválido para visualização da página.</H2>"
end if
%>
Neste caso, o programador condicionou o redirecionamento a dois tipos de endereço IP correspondentes às subredes de sua empresa. Do contrário, aparecerá a mensagem de que o IP é inválido para visualização.
segunda-feira, 22 de outubro de 2012
Detectando o clique do botão direito do mouse em Javascript
Os menus de contexto personalizados em páginas HTML são fundamentais para que se tenha o controle completo do comportamento da aplicação destas páginas.
Para fazê-lo, precisamos interceptar os eventos do mouse. A seguir temos um exemplo bem simples desta interceptação:
Existem dois pontos a se considerar para o controle do mouse e do menu de contexto dos navegadores. O ponto * 1 * contém a função de tratamento do evento citado no ponto * 2 *, que declara o evento onmousedown.
Executando a script (em formato de página HTML), e dando o clique direito do mouse, aparece a mensagem do comando alert:
Portanto, a propriedade button do evento de mouse corresponde a "2" para o botão direito do mouse. O botão esquerdo traz o valor "1".
Exemplo mostrando um menu de contexto bem básico
No ponto * 1 * declaramos a função init(). Nela declaramos a interceptação do evento "onmousedown", que se refere à função contextMenu.
No ponto * 2 * declaramos a função fecha() que vai fechar a janela de contexto da DIV cujo id é "menu".
No ponto * 3 * declaramos a função contextMenu(), que trata eventos provocados pelos botões do mouse. Se o botão for o direito, ela mostra a DIV cujo id é "menu".
No ponto * 4 *, interceptamos o evento "oncontextmenu", de modo que o menu de contexto default do navegador não seja apresentado (com as funções de copiar, colar, imprimir, etc).
Para fazê-lo, precisamos interceptar os eventos do mouse. A seguir temos um exemplo bem simples desta interceptação:
Existem dois pontos a se considerar para o controle do mouse e do menu de contexto dos navegadores. O ponto * 1 * contém a função de tratamento do evento citado no ponto * 2 *, que declara o evento onmousedown.
Executando a script (em formato de página HTML), e dando o clique direito do mouse, aparece a mensagem do comando alert:
Portanto, a propriedade button do evento de mouse corresponde a "2" para o botão direito do mouse. O botão esquerdo traz o valor "1".
Exemplo mostrando um menu de contexto bem básico
No ponto * 1 * declaramos a função init(). Nela declaramos a interceptação do evento "onmousedown", que se refere à função contextMenu.
No ponto * 2 * declaramos a função fecha() que vai fechar a janela de contexto da DIV cujo id é "menu".
No ponto * 3 * declaramos a função contextMenu(), que trata eventos provocados pelos botões do mouse. Se o botão for o direito, ela mostra a DIV cujo id é "menu".
No ponto * 4 *, interceptamos o evento "oncontextmenu", de modo que o menu de contexto default do navegador não seja apresentado (com as funções de copiar, colar, imprimir, etc).
Valores separados por vírgulas - Separar com expressões regulares
Uma das formas de compor uma lista muito limitada em número de ocorrências é usar uma string.
Quando existem muitas ocorrências (mais de 50) compensa criar uma tabela em banco de dados. Depois é preciso ter uma forma de separar os valores contidos nesta lista. O exemplo a seguir explica isto:
Quando existem muitas ocorrências (mais de 50) compensa criar uma tabela em banco de dados. Depois é preciso ter uma forma de separar os valores contidos nesta lista. O exemplo a seguir explica isto:
Consistência de data com expressões regulares em Javascript
A consistência de data em javascript se resolve com uma expressão regular com número de ocorrências, evitando o lugar comum de [\d+]\/[\d+]\/[\d+], que pode admitir muitos formatos errados.
Os numerais entre chaves especificam o número de ocorrências esperado para a máscara em questão.
Os numerais entre chaves especificam o número de ocorrências esperado para a máscara em questão.
sexta-feira, 19 de outubro de 2012
Alternando estilos CSS em jquery
Em jquery podemos facilmente alternar estilos das Tags HTML por meio de funções.
Lembre-se de colocar no diretório a biblioteca jquery correta:
* 1 * - Função que responde pelo clique do botão no corpo do HTML;
* 2 * - Definição da função no evento do botão (OnClick).
Lembre-se de colocar no diretório a biblioteca jquery correta:
* 1 * - Função que responde pelo clique do botão no corpo do HTML;
* 2 * - Definição da função no evento do botão (OnClick).
Geração de números aleatórios com ASP sem Rnd
A função Random em ASP (Rnd) gera números aleatórios, bem como o método Math.Random faz o mesmo em javascript. No entanto, para fins de auditoria, é preciso explicitar qual o algoritmo que existe por trás do cálculo dos números aleatórios obtidos.
Para esta finalidade, temos um método totalmente transparente, desde a semente de número aleatório utilizada, expressa no código abaixo:
<style>
SPAN.vm { color:red; }
</style>
<%
NO_MAX = 80
QtNoGerar = 12
'* Declarações de variáveis
Dim RaizNumeroAleatorio
Dim DtHoje, Agora
Dim Dia, Mes, Ano, Hora, Minuto, Segundo
Dim sNUMERO_ALEATORIO,NUMERO_ALEATORIO
Dim intNoAleat
Dim Arranjo()
ReDim Arranjo(QtNoGerar)
'* Obtenção parâmetros raiz
DtHoje = Date()
Agora = Time()
'* Obtenção fragmentos de parâmetros
Ano = year(DtHoje):Mes = Month(DtHoje):Dia = Day(DtHoje)
Hora = Hour(Agora):Minuto = Minute(Agora):Segundo = Second(Agora)
'* Concatena parâmetros de data e hora
if Application("PSpca_RandomDec") = "" then
RaizNumeroAleatorio = CDbl(Segundo&Dia&Mes&Ano&Hora&Minuto)
RaizNumeroAleatorio = RaizNumeroAleatorio + 3.141592653589
else
RaizNumeroAleatorio = CDbl(Application("PSpca_RandomDec"))
end if
Response.write("Raiz Inicial: "&RaizNumeroAleatorio)
%>
<table border=1 cellspacing=0>
<th>Indice<th>Pré-Expoente<th>Matriz<th>Matriz<sup>8</sup><br>(Parte fracionária)<th>Número Sorteado<th>STATUS
<%
j = 0
Do while j < QtNoGerar
'* 1 - Exibe a Raiz do número aleatório modificada
Response.write("<tr><td align=right>"&CStr(j)&"<td align=right>"&RaizNumeroAleatorio)
intNoAleat = CDbl(FormatNumber(CStr(RaizNumeroAleatorio),0))
'* 2 - RETIRA A PARTE FRACIONÁRIA
NUMERO_ALEATORIO = RaizNumeroAleatorio - intNoAleat
'* 3 - SOMA UM PARA QUE O NUMERO PRODUZIDO NÃO REDUZA CADA VEZ MAIS A MANTISSA (tendendo ao valor zero)
NUMERO_ALEATORIO = NUMERO_ALEATORIO + 1
'* 4 - Exibe o número aleatório produzido
Response.write("<td align=right>"&NUMERO_ALEATORIO)
'* 5 - Eleva a matriz ao expoente 8
NUMERO_ALEATORIO = NUMERO_ALEATORIO ^ 8
'* 6 - PARTE INTEIRA
intSorteio = CDbl(FormatNumber(CStr(NUMERO_ALEATORIO),0))
'* 7 - Devido a erros de arredondamento, a subtração pode ficar ligeiramente negativa, portanto é retirado o sinal
Sorteio = Abs(NUMERO_ALEATORIO - intSorteio)
'* 8 - Exibe o número sorteado (parte fracionária)
Response.write("<td align=right>"&Sorteio)
'* 9 - Multiplica a mantissa pelo número limite de Sorteio, e soma 1, para evitar que o número sorteado seja 0 (zero)
sSorteio = FormatNumber(CStr(Sorteio * NO_MAX)+1,0)
'* 10 - Exibe o número Sorteado em formato inteiro
Response.write("<td align=right>" & sSorteio & "")
'* 11 - Guarda a mantissa como próxima raiz de número aleatório
RaizNumeroAleatorio = Sorteio 'NUMERO_ALEATORIO
JaExiste = (0=1)
'* 12 - Checa se o número sorteado já foi gerado anteriormente
for i = 1 to j
if sSorteio = Arranjo(i) then
JaExiste = (0=0)
i = QtNoGerar
end if
next
if JaExiste then
JaExiste = "<span class=Vm>JaExiste</span>"
else
j = j + 1
Arranjo(j) = sSorteio
JaExiste = ""
end if
'* 13 - Exibe o Status do número gerado (Se ja existe ou não)
Response.write("<td align=right>"&JaExiste)
loop
%>
</table>
<%
Application("PSpca_RandomDec") = CStr(RaizNumeroAleatorio)
%>
Os números são gerados até que alcancem o número de números pedidos, SEM QUE NENHUM SE REPITA.
Para esta finalidade, temos um método totalmente transparente, desde a semente de número aleatório utilizada, expressa no código abaixo:
<style>
SPAN.vm { color:red; }
</style>
<%
NO_MAX = 80
QtNoGerar = 12
'* Declarações de variáveis
Dim RaizNumeroAleatorio
Dim DtHoje, Agora
Dim Dia, Mes, Ano, Hora, Minuto, Segundo
Dim sNUMERO_ALEATORIO,NUMERO_ALEATORIO
Dim intNoAleat
Dim Arranjo()
ReDim Arranjo(QtNoGerar)
'* Obtenção parâmetros raiz
DtHoje = Date()
Agora = Time()
'* Obtenção fragmentos de parâmetros
Ano = year(DtHoje):Mes = Month(DtHoje):Dia = Day(DtHoje)
Hora = Hour(Agora):Minuto = Minute(Agora):Segundo = Second(Agora)
'* Concatena parâmetros de data e hora
if Application("PSpca_RandomDec") = "" then
RaizNumeroAleatorio = CDbl(Segundo&Dia&Mes&Ano&Hora&Minuto)
RaizNumeroAleatorio = RaizNumeroAleatorio + 3.141592653589
else
RaizNumeroAleatorio = CDbl(Application("PSpca_RandomDec"))
end if
Response.write("Raiz Inicial: "&RaizNumeroAleatorio)
%>
<table border=1 cellspacing=0>
<th>Indice<th>Pré-Expoente<th>Matriz<th>Matriz<sup>8</sup><br>(Parte fracionária)<th>Número Sorteado<th>STATUS
<%
j = 0
Do while j < QtNoGerar
'* 1 - Exibe a Raiz do número aleatório modificada
Response.write("<tr><td align=right>"&CStr(j)&"<td align=right>"&RaizNumeroAleatorio)
intNoAleat = CDbl(FormatNumber(CStr(RaizNumeroAleatorio),0))
'* 2 - RETIRA A PARTE FRACIONÁRIA
NUMERO_ALEATORIO = RaizNumeroAleatorio - intNoAleat
'* 3 - SOMA UM PARA QUE O NUMERO PRODUZIDO NÃO REDUZA CADA VEZ MAIS A MANTISSA (tendendo ao valor zero)
NUMERO_ALEATORIO = NUMERO_ALEATORIO + 1
'* 4 - Exibe o número aleatório produzido
Response.write("<td align=right>"&NUMERO_ALEATORIO)
'* 5 - Eleva a matriz ao expoente 8
NUMERO_ALEATORIO = NUMERO_ALEATORIO ^ 8
'* 6 - PARTE INTEIRA
intSorteio = CDbl(FormatNumber(CStr(NUMERO_ALEATORIO),0))
'* 7 - Devido a erros de arredondamento, a subtração pode ficar ligeiramente negativa, portanto é retirado o sinal
Sorteio = Abs(NUMERO_ALEATORIO - intSorteio)
'* 8 - Exibe o número sorteado (parte fracionária)
Response.write("<td align=right>"&Sorteio)
'* 9 - Multiplica a mantissa pelo número limite de Sorteio, e soma 1, para evitar que o número sorteado seja 0 (zero)
sSorteio = FormatNumber(CStr(Sorteio * NO_MAX)+1,0)
'* 10 - Exibe o número Sorteado em formato inteiro
Response.write("<td align=right>" & sSorteio & "")
'* 11 - Guarda a mantissa como próxima raiz de número aleatório
RaizNumeroAleatorio = Sorteio 'NUMERO_ALEATORIO
JaExiste = (0=1)
'* 12 - Checa se o número sorteado já foi gerado anteriormente
for i = 1 to j
if sSorteio = Arranjo(i) then
JaExiste = (0=0)
i = QtNoGerar
end if
next
if JaExiste then
JaExiste = "<span class=Vm>JaExiste</span>"
else
j = j + 1
Arranjo(j) = sSorteio
JaExiste = ""
end if
'* 13 - Exibe o Status do número gerado (Se ja existe ou não)
Response.write("<td align=right>"&JaExiste)
loop
%>
</table>
<%
Application("PSpca_RandomDec") = CStr(RaizNumeroAleatorio)
%>
Os números são gerados até que alcancem o número de números pedidos, SEM QUE NENHUM SE REPITA.
Assinar:
Postagens (Atom)