Todos os valores fornecidos quando o usuário preenche o conteúdo da página <FORM>, ou insere o valor após a URL na barra de endereços do navegador, são utilizados pelo script ASP através das coleções Form e QueryString. Esta é uma maneira simples de acessar valores em código ASP.
1. Técnicas gerais para acessar coleções ASP
A maioria das coleções ASP são semelhantes às coleções comuns vistas em VB. Efetivamente, eles são arrays de valores, mas são acessados usando uma chave de string de texto (que não é sensível ao tamanho) e um índice inteiro. Portanto, se a página da Web do cliente contiver o <FORM> da seguinte forma:
<FORM ACTION="show_request.asp" METHOD="POST">
Nome:<TIPO DE ENTRADA=”TEXTO” NOME=”Nome”>
Sobrenome:<TIPO DE ENTRADA=”TEXTO” NOME=”Sobrenome”>
<TIPO DE ENTRADA=”ENVIAR” VALOR=”Enviar”>
</FORM>
Você pode acessar o valor em seu controle acessando a coleção Form do ASP:
strFirstName = Request.Form("FirstName")
strLastName = Request.Form("LastName")
também pode usar o índice inteiro dos controles no formulário. O intervalo do índice começa no primeiro controle definido no HTML e depois classifica de acordo com a ordem de definição:
strFirstName =. Solicitação.Formulário (1)
strLastName = Request.Form(2)
No entanto, a última técnica de utilização de indexação inteira não é recomendada, porque assim que o controle no HTML for alterado ou um novo controle for inserido, o código ASP obterá o valor errado. Além disso, é extremamente confuso para quem lê o código.
1) Para acessar todos os valores da coleção,
você pode transformar uma série de valores de todo o Form em uma variável de caractere único, referenciando a coleção sem fornecer uma chave ou índice.
StrAllFormContent = Request.Form
Se a caixa de texto contiver os valores Priscilla e Descartes, a instrução Request.Form retornará os seguintes caracteres:
FirstName=Priscilla&LastName=Descartes
Observe que os valores fornecidos aparecem na forma de pares nome/valor (ou seja, Nome do controle = valor do controle), e cada par nome/valor é separado um do outro pelo símbolo "&". Essa técnica é útil se você planeja passar o conteúdo do formulário para um aplicativo executável separado ou DLL que espera que os valores estejam em um formato padrão. De modo geral, porém, o conteúdo de uma coleção é acessado usando o nome do controle no formulário como uma chave de texto.
2) Percorrendo uma coleção ASP
Existem duas maneiras de percorrer todos os membros de uma coleção ASP. Os métodos são basicamente os mesmos das coleções VB comuns. Cada coleção fornece uma propriedade Count, que retorna o número de itens na coleção. Ele pode ser percorrido usando a propriedade Count usando um índice inteiro.
Para intLoop = 1 para Request.Form.Count
Response.Write Request.Form(intLoop) & “<BR>”
PróximoSe
o formulário anterior contiver duas caixas de texto com valores Priscilla e Descartes, você obterá os seguintes resultados:
Priscilla
Descartes
Entretanto, uma abordagem melhor é usar a estrutura For Each...Next.
Para cada objItem em Request.Form
Response.Write objItem & “=" & Request.Form(objItem) & “<BR>”
PróximoA
vantagem disso é que você pode acessar o nome e o valor do controle. O código acima resultará no seguinte:
FirstName = Priscilla
Sobrenome = Descartes
Observe que os valores <FORM> retornados por alguns navegadores ao ASP podem não ser iguais à ordem exibida na página.
3) Natureza de vários valores dos membros da coleção
Em alguns casos, cada membro da coleção ASP pode ter mais de um valor. Isso acontece quando há vários controles na definição HTML que possuem o mesmo atributo Name. Por exemplo:
<FORM ACTION=”Show_request.asp” METHOD=”POST”>
<TIPO DE ENTRADA=”TEXTO” NOME=”OutroHobby”>
<TIPO DE ENTRADA=”TEXTO” NOME=”OutroHobby”>
<TIPO DE ENTRADA=”TEXTO” NOME=”OutroHobby”>
<TIPO DE ENTRADA=”ENVIAR” VALOR=”Enviar”>
</FORM>
Na coleção Form, será criada uma entrada para "OtherHobby". No entanto, incluirá os valores das três caixas de texto. Se o usuário deixar um ou mais campos em branco ao enviar, o valor retornado será uma string vazia. Se o usuário inserir Jardinagem e Montanhismo na primeira e terceira caixas de texto respectivamente, e a segunda caixa de texto estiver vazia, acessar Request.Form("OtherHobby") em nosso código ASP retornará a string:
Jardinagem, ,Montanhismo
Para poder acessar um único valor neste caso, você pode usar um código mais complexo:
For Each objItem In Request.Form
If Request.Form(objItem).Count >1 Then 'Mais de um valor neste item Response.Write objItem & “:<BR>”
Para intLoop = 1 Para Request.Form(objItem).Count
Response.Write “Subkey” & intLoop & “value = “& Request.Form(objItem) (intLoop) & “<BR>”
Próximo
Outro
Response.Write objItem & “=” & Request.Form(objItem) & “<BR>”
Terminar se
NextPara
a instância do formulário anterior contendo três controles OtherHobby, isso retornaria:
OtherHobby:
Valor da subchave 1 = Jardinagem
Valor da subchave 2 =
Valor da subchave 3 = Montanhismo
No entanto, como é raro dar o mesmo nome a várias caixas de texto, esta técnica raramente é usada.
a) Controles de rádio ou botão de página em HTML
Em HTML, a situação em que vários controles precisam receber o mesmo atributo Name é o botão de rádio (ou opção), por exemplo:
<FORM ACTION="show_request.asp" METHOD=" POST ”>
Eu moro em:
<TIPO DE ENTRADA=”RÁDIO” NOME=”País” VALOR=”AM”>América<BR>
<TIPO DE ENTRADA=”RÁDIO” NOME=”País” VALOR=”EU”>Europa<BR>
<TIPO DE ENTRADA=”RÁDIO” NOME=”País” VALOR=”AS”>Ásia<BR>
<TIPO DE ENTRADA=”ENVIAR” VALOR=”Enviar”>
</FORM>
Como o usuário só pode selecionar um dos vários itens (é por isso que eles recebem o mesmo nome), apenas um valor de retorno será obtido e o navegador só poderá enviar o valor do controle selecionado. Portanto, se o utilizador deste formulário tiver seleccionado "Europez", esta entrada será obtida, e o seu valor será obtido percorrendo o conjunto de formulários:
Country = EU
Como é fornecido um atributo VALUE diferente para cada controlo, este reflecte o valor correspondente a cada entrada O nome do país ou região. Se o atributo VALUE for omitido, o navegador retornará o valor "on", então você obterá:
Country = on
Isto não é usado com frequência, então o atributo VALUE é geralmente usado para controles de rádio com o mesmo nome.
b) Controle de caixa de seleção HTML
Quando o código-fonte HTML em um formulário contém um controle de caixa de seleção, geralmente recebe um nome exclusivo, por exemplo:
<FORM ACTION="show_request.asp" METHOD="POST">
Eu gosto:
<TIPO DE ENTRADA=”CHECKBOX” NOME=”Leitura” VERIFICADO> Leitura
<TIPO DE ENTRADA=”CAIXA DE VERIFICAÇÃO” NOME=”Comer”>Comer
<INPUT TYPE=”CHECKBOX” NAME=”Dormindo”> Dormindo
<TIPO DE ENTRADA=”ENVIAR” VALOR=”Enviar”>
</FORM>
Neste caso, ao enviar o formulário, se apenas a primeira e a terceira caixas de seleção estiverem marcadas (marcadas), ao percorrer a coleção Form, serão obtidos os seguintes valores:
Reading = on
Sleeping = on
Entretanto, se você fornecer um valor para cada caixa de seleção, esse valor será enviado ao servidor em vez da string "on". Por exemplo, o formulário é o seguinte:
<FORM ACTION="show_request.asp" METHOD="POST">
Eu gosto:
<TIPO DE ENTRADA=”CAIXA DE VERIFICAÇÃO” VALOR=”Hobby025” NOME=”Hobby” VERIFICADO>_
Natação
<TIPO DE ENTRADA=”CAIXA DE VERIFICAÇÃO” VALOR=”Hobby003” NOME=”Hobby” VERIFICADO>_
Leitura
<INPUT TYPE=”CHECKBOX” VALUE=”Hobby068” NAME=”Hobby”>Comer
<INPUT TYPE=”CHECKBOX” VALUE=”Hobby010” NAME=”Hobby”>Dormir
<TIPO DE ENTRADA=”ENVIAR” VALOR=”Enviar”>
</FORM>
Se todas as caixas de seleção, exceto a terceira, forem enviadas, a coleção Request.Form produzirá os seguintes resultados:
Hobby = Hobby025, Hobby003, Hobby010
Se você escrever um código de passagem de coleção mais complexo, conforme mencionado anteriormente (mostrado separadamente cada subchave) , você obtém o resultado:
Hobby:
Valor da subchave 1 = Hobby025
Valor da subchave 2 = Hobby003
Valor da subchave 3 = Hobby010
Deve-se observar que em dois casos, o controle não selecionado não retorna nenhum valor. No resultado do primeiro caso, não há vírgulas enganosas e não há valores nulos no segundo caso. Isto é diferente dos resultados do teste equivalente utilizando caixas de texto descritas acima. Ao usar caixas de texto, cada caixa de texto retorna um valor, até mesmo uma string vazia. Isso é causado pelo navegador. Portanto, você deve ficar atento a esse problema ao acessar coleções em código ASP.
Um efeito colateral complicado da situação acima é que, ao usar caixas de seleção, o índice do valor da caixa de seleção não tem relação com a posição do controle no HTML original. No exemplo acima, a quarta caixa de seleção tem um número de subchave 3. , porque quando o formulário é enviado, o segundo controle não está selecionado.
c) Controle de lista HTML
A tag <SELECT> em HTML é usada para gerar uma caixa de listagem suspensa padrão, cujos valores são representados de uma forma híbrida interessante. O formulário a seguir é criado com 5 valores para o usuário selecionar. Por conter o atributo MULTIPLE, é possível selecionar mais de uma entrada mantendo pressionada a tecla Shift ou Ctrl durante a seleção.
<FORM ACTION=”show_request.asp” MÉTODO=”POST”>
<SELECIONE NOME=”Hobby” TAMANHO=”5” MÚLTIPLO>
<VALOR DA OPÇÃO=”Hobby001”>Programação</OPÇÃO>
<VALOR DA OPÇÃO=”Hobby025”>Natação</OPÇÃO>
<VALOR DA OPÇÃO=”Hobby003”>Leitura</OPÇÃO>
<VALOR DA OPÇÃO=”Hobby068”>Comer</OPÇÃO>
<VALOR DA OPÇÃO=”Hobby010”>Dormir</OPÇÃO>
</SELECIONAR><P>
<TIPO DE ENTRADA=”ENVIAR” VALOR=”Enviar”>
</FORM>
retorna uma única entrada na coleção Form, que contém os valores selecionados (o atributo VALUE especificado em uma única tag <OPTION>), separados por vírgulas:
Hobby = Hobby025, Hobby003, Hobby010
if Usando um código de passagem de conjunto um pouco mais complexo (mostrando cada subchave individualmente), obtemos:
Hobby:
Valor da subchave 1 = Hobby025
Valor da subchave 2 = Hobby003
Valor da subchave 3 = Hobby010
Esta é a mesma situação acima para a caixa de seleção com o mesmo nome. Na verdade, uma lista SELECT pode ser considerada como uma lista de caixas de seleção para selecionar (não marcar) os itens correspondentes.
No entanto, a caixa de listagem também possui um valor especificado. Se você definir o atributo VALUE na tag <OPTION>, obterá o conteúdo de texto da opção selecionada. O conjunto Request.Form conterá o seguinte item:
Hobby = Swimming,. Ler, dormir
e, da mesma forma, códigos de iteração de coleção mais complexos retornariam resultados como este:
Hobby:
Valor da subchave 1 = Natação
Valor da subchave 2 = Leitura
Valor da subchave 3 = Sleeping
Claro, se um único item for selecionado e o atributo VALUE for fornecido em <OPTION>, o resultado conterá apenas:
Hobby = Hobby025
Se o atributo VALUE não for fornecido, o resultado será:
Hobby =. Natação
Isso permite que ele esteja ausente (ou seja, sem VALOR) exibe o texto da opção e também pode fazer as alterações correspondentes. O último caso é extremamente útil em certas situações, como quando você deseja exibir (uma string descritiva) e passar um conteúdo completamente diferente (como usar um código curto para representar uma string descritiva).
d)
As caixas de seleção e os botões de opção dos controles de imagem e envio de HTML são exemplos de controles booleanos que retornam "on" quando marcados ou selecionados. Ao contrário das caixas de texto e da maioria dos outros controles HTML, os navegadores não incluem controles desmarcados ou selecionados. não selecionado.
Existe outro controle booleano comumente usado chamado botão HTML. Como os tipos <INPUT TYPE="SUBMIT">, <INPUT TYPE="RESET">, <INPUT TYPE="IMAGE">, <INPUT TYPE="BUTTON"> e <BUTTON>...</BUTTON>.
Os controles do tipo BUTTON não retornam nenhum valor porque não têm impacto direto no formulário. Mesmo se você usar o método Submit usado para chamar o formulário, o navegador não incluirá o valor do controle do tipo BUTTON em nenhuma solicitação. Da mesma forma, o valor de um botão <INPUT TYPE="RESET"> nunca é enviado ao servidor.
No entanto, os controles de botão de entrada do tipo SUBMIT e IMAGE realmente enviam o formulário ao servidor, e suas propriedades VALUE contêm os valores dos outros controles do formulário (desde que um atributo NAME esteja incluído na definição HTML). Por exemplo, este formulário pode fazer parte de um aplicativo Web do tipo assistente que permite ao usuário avançar ou cancelar um processo:
<FORM ACTION="show_request.asp" METHOD="POST">
<TIPO DE ENTRADA=”ENVIAR” NOME=”btnEnviar” VALOR=”Próximo”>
<TIPO DE ENTRADA=”ENVIAR” NOME=”btnSubmit” VALOR=”Anterior”>
<TIPO DE ENTRADA=”SUBIMT” NOME=”btnSubmit” VALOR=”Cancelar”>
</FORM>
Em um formulário, você pode incluir vários botões SUBMIT. Neste caso, cada botão deve receber um atributo VALUE exclusivo, conforme mostrado acima. Quando um formulário é enviado, percorrer os valores da coleção Request.Form produzirá um valor que depende de qual botão foi pressionado para enviar o formulário. Se o usuário pressionar o botão "Anterior", ele obterá:
btnSubmit = Anterior
Portanto, a coleção Request.Form pode ser consultada para determinar a próxima página exibida, por exemplo:
Select Case Request.Form("btnSubmit")
Caso "Próximo"
Resposta.Redirect "página_3.asp"
Caso "Anterior"
Resposta.Redirect "página_1.asp"
Caso "Cancelar"
Response.Redirect "main_menu.asp"
End Select
Ao mesmo tempo, você também pode usar atributos NAME diferentes para cada botão, conforme necessário. E selecione o nome do controle cujo valor está contido na coleção Form. Extremamente útil em situações onde o controle não possui uma marcação completa, mas é seguido por um rótulo de texto mais longo, conforme mostrado na imagem abaixo.
A interface desta tela é gerada pelo seguinte código:
<FORM ACTION="show_request.asp" METHOD="POST">
<B>O que você quer fazer agora?</B><P>
<INPUT TYPE=”SUBMIT” NAME=”btnNext” VALUE= ”>Vá para a próxima página<P>
<INPUT TYPE=”SUBMIT” NAME=”btnAnterior” Valor=” ”> Voltar para a página anterior<P>
<INPUT TYPE=”SUBMIT” NAME=”btnCancel” VALUE=” ”>Cancelar e voltar para a página do menu principal<P>
</FORM>
Na página ASP, após receber os dados, você pode verificar o valor fornecido pelo nome do botão para determinar qual botão foi pressionado.
Se Len(Request.Form(“btnNext”)) Então Response.Redirect “page_3.asp”
Se Len(Request.Form(“btnAnterior”)) Então Response.Redirect “page_1.asp”
If Len(Request.Form("btnCancel")) Then Response.Redirect "main_menu.asp"
Este trabalho consiste em consultar a coleção ASP em uma chave e retornar uma string vazia se ela não existir. Em outras palavras, se o segundo botão (página anterior) for pressionado, o valor de Request.Form("btnNext") é uma string vazia e seu comprimento é zero sem gerar erro. Quando o segundo botão for pressionado, o valor desta entrada na coleção Form, Request.Form("btnPrevious"), será " " e seu comprimento será maior que zero.
e) Melhorar a eficiência do uso da coleção Request.
Acessar uma coleção ASP para baixar um valor é um processo demorado e computacionalmente intensivo porque a operação envolve uma série de pesquisas de coleções relacionadas, o que é muito mais lento do que acessar uma variável local. Portanto, se você planeja usar um valor na coleção várias vezes na página, considere armazená-lo como uma variável local, por exemplo:
strTitle = Request.Form("Title")
strPrimeiroNome = Request.Form("Nome")
strLastName = Request.Form("Sobrenome")
Se Len (stTitle) Então strTitle = strTitle & ““
Se strPrimeiroNome = " " Então
StrFullName = strTítulo & " " & strSobrenome
ElseIf Len(strNome) = 1 Então
StrFullName = strTítulo & strNome & “· “ & strSobrenome
Outro
StrFullName = strTítulo & strPrimeiroNome & " " & strSobrenome
End If
f) Pesquisar todas as coleções Request
Em alguns casos, é possível saber que o nome da chave de um valor aparecerá na coleção Request, mas não exatamente qual coleção se trata. Por exemplo, se várias páginas (ou seções diferentes de uma página) enviarem um valor para o mesmo script ASP, ele poderá aparecer na coleção Form ou QueryString.
Para ver por que um valor pode aparecer em coleções diferentes, considere esta situação: uma página é solicitada usando o elemento de hiperlink <A>. Nesse caso, a única forma de adicionar um valor à solicitação é adicioná-lo à URL. Porém, o mesmo valor pode já aparecer em um <FORM> em outra página, ou em uma parte diferente da mesma página:
...
<FORM ACTION=”process_page.asp” MÉTODO=”POST”>
<TIPO DE ENTRADA=”ENVIAR” NOME=”página” VALOR=”Próximo”>
<TIPO DE ENTRADA=”ENVIAR” NOME=”página” VALOR=”Anterior”>
<TIPO DE ENTRADA=”ENVIAR” NOME=”página” VALOR=”Ajuda”>
</FORMULÁRIO>
...
...
Para obter ajuda, vá para <A HREF=”process_page.asp?page=Help”>Página de Ajuda</A>
...
Neste caso, pressionar o botão Ajuda no formulário enviará o par nome/valor "page=Help" da coleção Request.Form. Porém, pressionar o hiperlink <A> também pode enviar o nome/valor "Page=Help", mas desta vez na coleção QueryString. Para acessar esse valor, utilize um recurso especial do objeto Solicitação ASP:
strPage = Request("page")
Isso pesquisará toda a coleção - QueryString, Form, Cookies, ClientCertificate, ServerVariables - em ordem, até que o nome do primeiro valor correspondente seja encontrado. Fazer isso é menos eficiente do que acessar diretamente a coleção apropriada e não é seguro, a menos que haja garantia absoluta de que o valor não aparecerá em outra coleção.
Por exemplo, você pode querer coletar o nome do servidor Web que atende à solicitação de um cliente procurando por "SERVER_NAME" na coleção Request.ServerVariables que aparece em cada consulta. No entanto, se qualquer outra coleção também contiver um valor denominado "server_name" (lembre-se de que os nomes das chaves não diferenciam maiúsculas de minúsculas), você obterá resultados incorretos ao usar Request("server_name"). Usando a sintaxe Reqeust.ServerVariables("server_name"), teremos dificuldade em rastrear erros.
Em resumo, use a técnica "pesquisar todas as coleções" com extremo cuidado e somente quando nenhuma outra técnica fornecer os resultados necessários.
g) Acesse outras coleções
Nesta seção deste artigo focamos na coleção Form, que é provavelmente a mais utilizada. No entanto, todas estas técnicas são igualmente aplicáveis a outros objetos. Incluindo aqueles fornecidos pelas coleções do objeto Request (ou seja, Form, QueryString, Cookies, ServerVariables e ClientCertificate) e os cookies (e coleções fornecidas por outros objetos) fornecidos pelo objeto Response.
Daremos uma breve olhada em como um valor é inserido em uma coleção QueryString, juntamente com suas vantagens e desvantagens. No entanto, ambos os conjuntos de cookies possuem funcionalidades adicionais que tornam o uso de cookies mais conveniente, conforme discutido abaixo.