quarta-feira, 14 de maio de 2008

Formulário em MasterPage

Fazia um tempinho que não postava aqui, mas estou de volta.
Você (assim como eu), já tentou adicionar um formulário asp (runat=server) em uma MasterPage e depois não conseguiu pegar os dados de retorno utilizando a síntese comum: Request.Form("campo") ou Request.QueryString("campo").

O framework adiciona um prefixo ao nome do campo, gerando o erro:

Tipo: o campo "usuario" vira "ctl00$usuario".

Não adianta adicionar o prefixo ao efetuar o Request, pois o prefixo pode mudar.

A forma mais simples é adicionar uma função que busque entre os campos do formulário, a partir da chave do mesmo, o campo que você deseja; Tá certo que não é simples assim e pode "comprometer" um pouco a performance, mas funciona.

Public Function PegaValorCampoPost(ByVal nome As String) As String
Dim objeto As String = String.Empty
Dim valor As String = String.Empty
For Each objeto In Request.Form.Keys
If objeto.Contains(nome) Then
valor = Request.Form(objeto)
End If
Next
Return valor
End Function
Assim use o PegaValorCampoPost("campo") ao invés do Request.Form("campo").

Obs.: Somente é funcional para o método 'post', caso queira utilizar o método 'get', basta alterar o valor de Request.Form para Request.QueryString, na função.

extraído do site da msdn.

Nenhum comentário: