ASP NET - Notas diversas sobre aplicações web

Postback - Enviando dados para o servidor

1-O PostBack é o antigo evento submit do asp classico e ocorre quando uma página envia dados para o servidor.

Isto é feito através de um botão de submit que envia dados de um form que contém os controles cujos dados deverão ser enviados ao servidor.

Importante : As ferramentas de script podem criar novos controles dentro do form que será enviado ao servidor. Contudo, como o servidor não enviou os controles à página no seu retorno ele só vai buscar os dados dos controles que enviou originalmente. Portanto, se você usou algum script client-side para incorporar campos ao form que deverão ser enviados ao servidor você deverá, obrigatóriamente, ler esses dados num script do lado do servidor.

Exemplo típico do envio de dados ao servidor :
<form id="form1" runat="server">

    <div style="padding-left:30%;">
        <table>
            <tr>
                <td>Nome : </td>
                <td><asp:TextBox ID="txtNome" runat="server" Width="300px"></asp:TextBox></td>
            </tr>
            
            <tr><td> </td></tr>

            <tr>
                <td><asp:Button ID="btnCancelar" class="btn btn-default" runat="server" Text="Cancelar" OnClick="Cancelar_Click" /></td>
                <td style="text-align:right;"><asp:Button ID="btnProsseguir" class="btn btn-default" runat="server" Text="Prosseguir" /></td>
            </tr>
                </table>
    </div>
</form>

Importante : O asp:button é renderizado como <input type=sumit no browser.

No asp clássico no action do form colocava-mos a página de destino. No asp net é diferente.
Foi introduzido o conceito de viewstate que guarda o valor de todos os controles do form no postback.
Sendo assim, no asp net não há um action para outra página.
Com isto ao dar um submit os dados são salvos no viewstate e enviado para a própria página.

Importante : No ASP NET não é permitido ter 2 forms com runat-server na mesma página.
No ASP clássico isso era possível, casar um submit com um form e ter diversos forms na mesma página.

Postback - Recuperando os dados enviados no servidor

No evento Page Load da página podemos recuperar os dados:

Exemplo :
If IsPostBack Then
    Dim nome As String = Request.Form("txtNome")
End if

Note que o flag IsPostBack só será true no postback da página.
No OnLoad natural na carga da página pela primeira vez ele será falso.


Style:visibility:hidden em Server Controls

Cuidado que os controles com esses atributos não são enviados do server para o client.
Eles sequer existirão na página, não serão renderizados pelo browser e não existirão.

Exemplo :
<div style="padding-left:30%; visibility:hidden" runat="server" id="divGVSelect">
    <asp:GridView ID="dgvSelecionar" runat="server"></asp:GridView>
</div>

No exemplo acima, nem a div nem o gridview serão enviados do server ao client.

Correção do problema :
1-Retire o style=hidden do controle:
<div style="padding-left:30%;" runat="server" id="divGVSelect">
    <asp:GridView ID="dgvSelecionar" runat="server"></asp:GridView>
</div>

2-No load da página adicione o código: divGVSelect.Visible = False 'escondendo gv

3-Quando precisar exibir a div e o dgv : divGVSelect.Visible = True 'exibindo gv


Overload de Métodos

Overload de métodos é a capacidade do compilador diferenciar funções com assinaturas diferentes através de seus parâmetros.
Citando um exemplo eu tenho a function a()...
Se eu definir uma outra function a() vai dar erro com certeza.
Mas se eu definir uma funcion a(x as integer)... não irá dar erro porque uma função a não tem parâmetro e a outra tem.
Isto ocorre não só com o número de parâmetros mas também com seu tipo.
Ex.: function x(int a, float b) tem uma assinatura diferente de function x(float a, float b).
O compilador irá aceitar e saberá qual função deverá ser chamada pelo tipo do parâmetro dentro dela.


Forms Server Side

No ASP NET só podemos ter um form server side na página. Se colocar 2 dá erro no ASP NET mas no ASP Clássico não dá.