ASP NET - Form

Origens

Se você se recorda o servidor web tem um mecanismo de envio de dados feito pelo CGI e é tradicional em todas as plataformas de desenvolvimento web para o envio de informações do lado do cliente para o lado do servidor.

O ASP NET amplia esse conceito com controles bem mais poderosos mas, básicamente, feitos por esses controles primitivos.

Os controles originais do HTML 5 para envio de dados via CGI são normalmente as <tags input type=
• text - Texto simples - Padrão do controle input se o parâmetro for omitido.
• checkbox - Uma caixa de opção que pode ser clicada ou não
• Color - Exibe um controle para escolha de cores
• date - Exibe um calendário para escolha de data
• datetime-local - Abre uma caixa para escolha do horário
• email - Uma caixa de texto para digitar um endereço de email
• File - Abre um caixa de seleção para a escolha de um arquivo local
• hidden - Uma caixa de texto que não é exibida no documento html
• image -
• month -
• number - Uma caixa de texto que só aceita números
• password - Uma caixa de texto onde o eco dos caracteres na tela é exibido como *
• radio - Um botão de opção que pode ou não ser clicado
• range - Uma caixa onde são exibidos uma faixa de números e o usuário pode escolher o que desejar
• reset - Limpa ou retorna os valores originais de todos os controles input da página
• search -
• tel - Abre uma caixa de texto para entrada de um telefone
• time - Uma caixa de texto para escolha de um horário
• url - Caixa de texto para entrada de uma url
• week - Abre uma caixa de texto com um calendário e retorna o número da semana (1 a 52) do ano

Caso deseje ver com mais detalhes a tag input sugiro visitar a página as tags de formulario.

Envio das informações para o servidor

Para que os dados dos controles input da página sejam enviados ao servidor devemos seguir o padrão:

1-As tags input devem ter um container de formulário, ou seja, a tag form.
<form action="pagDestino" method="get/post">

O parâmetro action="paginaDestino" indica para que página do servidor os dados deverão ser enviados para serem tratados do lado do servidor.

O parâmetro method pode ser method=post onde os dados do formulário são enviados no cabeçalho da requisição ou o método pode ser method=get onde todos os parametros serão aglutinados na url no formato url?par1=val1&pal2=val3....
O caractere ? separa a url dos parâmetros e o caractere & separa os parâmetros que são sempre enviados com o seu nome seguido do sinal de igual e seguido de seu valor. No caso os nomes dos parâmetros seria os 'name' das tags input.

2-Um botão tipo button ou submit.
• button - Envio das informações
• submit - Envio das informações

Quando o botão é clicado os dados serão enviados ao servidor.

Importante : No asp clássico podemos separar os inputs em forms diferentes e atribuir um action para cada um deles. Bem versátil. Contudo no ASP NET só é possivel ter um formulário no documento aspx com o parâmetro runat=server.

Recuperando os dados enviados

Dependendo do método que você usou no form vai ser o método para recuperar os dados.

Se você usou no form method=get você deverá recuperar os dados com o comando request.querystring("parametro") onde o parâmetro seria o nome (name) da tag input.
Importante frisar que neste caso todos os dados serão exibidos na url da página e, portanto, não devem ser sigilosos ou estratégicos porque o usuário pode mudar até na mão esse dado alterando a url. Portanto, se tem algo sigiloso como uma senha, nunca use o método get.

Outra restrição que o método get tem é que a url pode ter no máximo 8kb de tamanho. Apesar de enorme há situações que passamos mais dados que isso. Devemos evitar, mas é possível.

Se você usou no form o method=post você deverá obter os dados com o comando request.form("parametro") onde o parâmetro seria o nome (name) da tag input.
Neste caso todos os dados são enviados no cabeçalho da requisição e não estarão acessíveis ao usuário, apenas ao servidor. Muito mais seguro que o método GET.

Detalhes técnicos sobre o envio dos dados

1-Segurança : lembre-se que o usuário pode digitar qualquer coisa que desejar. Por exemplo, se você costuma pegar o valor do campo e contatenar no seu string do comando sql tome cuidado com o sql injection, ou seja, imagina se o usuário digitar um texto como ';drop table a*;'...ao concatenar com o seu string o comando drop table a* será executado à parte, como um comando separado do seu ( que seria um insert ou update). Você pode não gostar do resultado.

2-Os controles asp net com os parâmetros Visible="False" ou Enabled="false" não são enviados ao servidor.
Portanto use o controle <asp:hiddenfield para enviar os dados que você não deseja que os usuários veja ao servidor.