Rendan 0 Denunciar post Postado Agosto 26, 2011 Tenho um botão (button) em página asp.net (Vb.Net) que ao usuário clicar posta o form, porém eu quero que antes o botão fique disabilitado evitando que o usuário clique novamente pois o processamento pode demorar e a impaciência do usuário é grande. Como inibir o botão ou mesmo não permitir um novo post desta página? Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
eriva_br 7 Denunciar post Postado Agosto 26, 2011 aqui tem uma solução com asp.net ajax http://www.codeproject.com/Articles/96407/How-to-disable-subsequent-submit-button-clicks-whe <%@ Page Title="Test Disable Subsequent Submit Clicks Page" Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="_Default" %> <body> <form id="Form1" runat="server" action="Default.aspx"> <div> <asp:ScriptManager ID="ScriptManager" runat="server"> </asp:ScriptManager> <asp:UpdatePanel ID="AsynUpdatePanel" runat="server" UpdateMode="Conditional"> <ContentTemplate> <!-- Here on click is a long running operation e.g. 30 secs --> <asp:Button ID="Submit" runat="server" OnClick="Submit_Click" Text="Submit" /> <asp:UpdateProgress ID="UpdateProgress" runat="server" AssociatedUpdatePanelID="AsynUpdatePanel" DynamicLayout="False"> <ProgressTemplate> Update in Progress...</ProgressTemplate> </asp:UpdateProgress> </ContentTemplate> </asp:UpdatePanel> </div> <!-- Here we are blocking the subsequent requests using client side scripting --> <!-- Also instead of alert one can customize the way he wants to handle --> <script type="text/javascript" language="javascript"> var requestManager = Sys.WebForms.PageRequestManager.getInstance(); requestManager.add_initializeRequest(CancelPostbackForSubsequentSubmitClicks); function CancelPostbackForSubsequentSubmitClicks(sender, args) { var iIdBtn = "<%= Submit.ClientID %>"; if (requestManager.get_isInAsyncPostBack() && args.get_postBackElement().id == iIdBtn) { args.set_cancel(true); alert('A previous request is still in progress that was issued on clicking ' + args.get_postBackElement().id); } } </script> </form> </body> protected void Submit_Click(object sender, EventArgs e) { //A long running operation System.Threading.Thread.Sleep(5000); } Compartilhar este post Link para o post Compartilhar em outros sites
Rendan 0 Denunciar post Postado Agosto 26, 2011 Por favor, Alguma outra solução não utilizando ajax? Compartilhar este post Link para o post Compartilhar em outros sites
eriva_br 7 Denunciar post Postado Agosto 26, 2011 sem ajax podes utilizar uma função javascript, exemplo: btnEnviar.OnClientClick = "return Clique('Aguarde a requisição posterior esta sendo processada.');"; <script type="text/javascript" language="javascript"> vCliq = 0; function Clique(pMsg){ if (vCliq == 0) { vCliq = 1; objWin=window.showModelessDialog("aguarde.htm", "Aguarde","dialogWidth:600px;dialogHeight:170px;help:no;status:no;center:yes"); return true; } else { alert(pMsg); return false; } } </script> OBS.: essa linha é opcional objWin=window.showModelessDialog sugestão para o aguarde.htm <HTML> <HEAD> <TITLE>Aguarde...</TITLE> </HEAD> <BODY bgColor=white link="#FFFFFF" vlink="#FFFFFF" alink="#FFFFFF"> <TABLE WIDTH=75% ALIGN=center border=0 CELLSPACING=10 CELLPADDING=0 bgcolor=White> <TR> <TD align=center> <FONT color=Red> <B>Aguarde, este processo pode demorar alguns minutos!! </B> <BR> <img src="imgs/processo.gif" visible="true" /> <br />******************************************************************** <br />NÃO ATUALIZE A TELA E NEM USE NOVAMENTE O PROGRAMA ANTES DO FIM DO PROCESSAMENTO <br />********************************************************************<br> </FONT> </TD> </TR> </TABLE> </BODY> </HTML> Compartilhar este post Link para o post Compartilhar em outros sites