Desenvolvimento - C#

ModalDialog com aplicações ASP.NET

Nesse artigo estarei mostrando como utilizar ModalDialog em aplicações ASP.NET e mesmo após ações SERVER SIDE manter o ModalDialog aberto sem maiores problemas. Tecnologia(s): ASP.NET Javascript HTML

por Carlos Eduardo Romeiro Gabriel



Certamente alguma vez durante o desenvolvimento de um sistema Web você optou por utilizar janelas ModalDialog ao invés de um simples Pop Up.

Concordo que a escolha foi excelente, pois assim uma gama de problemas acaba sendo evitados como, por exemplo:

- Problemas com o browser que bloqueiam Pop Up;

- Problemas no gerenciamento no caso da mesma janela ser aberta inúmeras vezes;

- Problemas no caso do Sistema ser fechado e a janela Pop Up continuar aberta;

- Etc.

Pelos motivos acima e outros é sempre mais confortável e cômodo utilizar janelas ModalDialog, porem existe um pequeno detalhe que esse artigo estará mostrando como “burlar”. Ao contrário de janelas Pop Up, janelas ModalDialog sempre esperam uma ação, e assim que essa ação é realizada ela sempre tentará se fechar automaticamente, sendo que muitas vezes não é isso que queremos, ao contrário, queremos continuar navegando. A aplicação abaixo mostra como burlar esse problema:

1-) Crie uma novo Web Site (serve também para Aplicação Web, somente por conveniência estou utilizando Web Site para exemplo).

Obs: Esse artigo não se destinará a explicar propriedades de objetos, Tag’s HTM, propriedades javascript’s e CSS, somente como utilizar corretamente ModalDialog.

2-) Adicione um novo Web Form chamado MeuModal.

3-) Insira um novo objeto TreeView.

4-) Em propriedades deixa os valores com algo parecido abaixo:

O Body dessa página deverá ficar:

<body>

    <form id="form1" runat="server">

    <div>

   

       <asp:TreeView ID="TreeView1" runat="server">

          <Nodes>

             <asp:TreeNode Text="Nivel 1" Value="Nivel 1">

                <asp:TreeNode Text="A" Value="A"></asp:TreeNode>

                <asp:TreeNode Text="B" Value="B"></asp:TreeNode>

             </asp:TreeNode>

          </Nodes>

       </asp:TreeView>

   

    </div>

    </form>

</body>

5-) Na página Default.aspx, inclua um botão com as seguintes propriedades:

ID = btnAbrirModalClassico

Text=Modal Classico

OnClientClick=”var objModal=window.showModalDialog(‘MeuModal.aspx’);”

O Body dessa página deverá ficar:

<body>

    <form id="form1" runat="server">

    <div>

       <asp:Button ID="btnAbrirModalClassico" runat="server" Text="Modal Classico" OnClientClick="var objmodal = window.showModalDialog("MeuModal.aspx");" />

    </div>

    </form></body>

6-) Marque a página Default.aspx como Start Page e rode a aplicação. (Nesse momento o Visual Studio irá informar que o Web Config será alterado para modo Debug, confirme e click em OK).

7) A aplicação irá abrir como a página abaixo:

8-) Clique no botão e a Janela de Modal irá se abrir conforme figura abaixo:

9-) Mesmo não tendo nenhum código nos níveis do TreeView, clique na opção A ou B, e repare que o ModalDialog irá abrir uma outra janela. Isso ocorre pois o TreeView ao realiza uma ação Server SIde, fazendo com que ele tente se fechar. Além dele continuar aberto, outro Modal é aberto e assim por diante.  O exemplo está utilizando o TreeView como exemplo, mas qualquer objeto que realize uma ação “Server Side” terá o mesmo efeito. Mas como contornar isso ? É fácil ! Crie uma nova página chamada “ShowModalForm”. O Body da página deverá ficar como o código abaixo:

<body>

    <form id="form1" runat="server">

    <div>

    <iframe id="iFrameModal" src="MeuModal.aspx"></iframe>

    </div>

    </form>

</body>

Repare que na verdade o que foi incluso foi a tag IFRAME, ou seja, aquela janela com o TREEVIEW será exibida dentro de um IFRAME.

10-) Volte na página Default.aspx e inclua um novo botão com as seguintes propriedades:

ID = btnAbrirModalNET

Text=Modal Classico .NET

OnClientClick=”var objModal=window.showModalDialog(‘ShowModalForm.aspx’);”

O código do Body deverá ficar da seguinte forma:

<body>

    <form id="form1" runat="server">

    <div>

       <asp:Button ID="btnAbrirModalClassico" runat="server" Text="Modal Classico" OnClientClick="var objmodal = window.showModalDialog("MeuModal.aspx");" />

      &nbsp;

      <asp:Button ID="btnAbrirModalNET" runat="server" Text="Modal Classico .NET" OnClientClick="var objmodal = window.showModalDialog("ShowModalForm.aspx");" />

    </div>

    </form>

</body>

10-) Agora rode novamente a aplicação, e será apresentado a tela abaixo:

11-) Ao invés de clicar no botão Modal Classico, clique no botão Modal Classico .NET e será aberto o Modal abaixo:

12-) Exatamente como fizemos no passo 9, clique no nó A ou B. Porém repare que ao contrário do que acontecia, a tela se mantém aberta.

Isso ocorre porque esse modal está apenas exibindo um IFRAME, e todo o código está rodando dentro do IFRAME, logo o comportamento esperado é realizado.

Carlos Eduardo Romeiro Gabriel

Carlos Eduardo Romeiro Gabriel - Colunista do Linha de Código