[ Shadowed @ 23.02.2007. 11:11 ] @
asp.net 2 je u pitanju mada je verovatno nebitno.
Imam jedan button za koji imam server-side kod za click dogadjaj. Ono sto bih hteo da uradim je da dodam i obradu dogadjaja na strani klijenta. Konkretno, hocu da disable-ujem button nakon klika da neko ne bi kliknuo vise puta. Problem je sto ne mogu da dodam OnClick atribut jer nije u pitanju html a ne znam da li ce se neka funkcija u JavaScript-u automatski smatrati (na osnovu imena) event handler-om tog dogadjaja (nisam bas preterano iskusan sa JS).
[ Vranac @ 23.02.2007. 12:06 ] @
Ukoliko sam dobro razumeo,
u property-ima buttona imas onClientClick, koji treba da poziva JS funkciju kad klijent klikne dugme...
Pretpostavicu da je dugme na samom formu (nije u okviru DG-a, Repeatera ili neke druge kontrole)
JS funkcija ide recimo ovako:
Code:

<script type="text/JavaScript">
<!--
    function ButtonDisabledState(id, checkState)
    {
        var btn = document.getElementById(id);
        if (btn != null)
           btn.disabled = checkState;
    }
//-->
</script>


Recimo da se dugme zove btnSubmit, na njegov onClientClick dodas ButtonDisabledState('btnSubmit', true);

tako da izgleda ovako:
Code:

<asp:Button ID="btnSubmit" runat="server" Text="Button" OnClientClick="ButtonDisabledState('btnSubmit',true);" />


I to ce disableovati dugme kada kliknes na njega, i onda uraditi redovan postback
[ Shadowed @ 23.02.2007. 12:28 ] @
Odlicno, to je to. Nisam probao jos, ali jeste to :)
Zahvaljujem.
[ mmix @ 23.02.2007. 15:10 ] @
Nazalost, to nije to, iz dva razloga:

1. Vazniji, kad se button.disabled postavi na true, zaustavlja se proces submitovanja. Cak iako ubacis btn.form.submit() nece odraditi kako treba posto ce post back "zaboraviti" koje dugme je pritisnuto i nece biti pozvan server side handler
2. Cak i da kod radi, radice samo za root-kontrole. Ako na formu stavis grid pa u njega button, njegov id vise nece biti Button1, nego neka kobasica tipa GridView1$ctl02$Button1, sto ne mozes znati unapred pre renderovanja grida.

asp.net1.1 je imao neke manuelne korake da se ovo sve resi, u asp.net 2.0 resava se jos elegantnije preko ClientScriptManager-a. Za ovaj primer napravi se sledeca dinamicka kontrola i onda se ona koristi umesto fabricke button kontrole gde god je potreban auto-disable:

Code:

using System;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace MyCustomControls
{
    [ToolboxData("<{0}:MyVanishingButton runat=server></{0}:MyVanishingButton>")]
    public class MyVanishingButton : Button
    {
        public MyVanishingButton()
        { }

        protected override void OnPreRender(EventArgs e)
        {
            string postback = Page.ClientScript.GetPostBackEventReference(this, "");
            OnClientClick = "this.disabled = true; " + postback;
        }
    }
}


[ Shadowed @ 23.02.2007. 15:31 ] @
Da, upravo sam otkrio da nece uraditi submit. Pokusacu da konvertujem ovo u VB i ubacim u sam .aspx fajl jer ne mogu da koristim code behind.
[ Vranac @ 23.02.2007. 15:50 ] @
@mmix:
U pravu si.

Dobro dosao nazad.

[ mmix @ 23.02.2007. 15:51 ] @
Citat:
Shadowed: Da, upravo sam otkrio da nece uraditi submit. Pokusacu da konvertujem ovo u VB i ubacim u sam .aspx fajl jer ne mogu da koristim code behind.


Sto ne?
Stavise, ako ne koristis codebehind, cemu asp.net

Mislim da neces moci da ovo konvertujes tako jednostavno posto poziv GetPostBackEventReference() metoda ne daje samo poziv callback metoda vec i osigurava da neophodne javascript komponente budu renderovane kao podrska callback-u.
[ Shadowed @ 23.02.2007. 16:49 ] @
Zato sto sajt hostujem na svom kompu a backup mi je free hosting koji ne podrzava codebehind. Sajt je mali (dva .aspx fajla) tako da cu kada uskoro kupim hosting lako prebaciti u codebehind.

Citat:
Stavise, ako ne koristis codebehind, cemu asp.net

Lakse mi je sa Framework-om nego sa objektima u asp3 :)
[ mmix @ 23.02.2007. 16:52 ] @
Citat:
Shadowed: Zato sto sajt hostujem na svom kompu a backup mi je free hosting koji ne podrzava codebehind. Sajt je mali (dva .aspx fajla) tako da cu kada uskoro kupim hosting lako prebaciti u codebehind.



Ok, do tad mala preporuka, asp.net2 podrzava on-the-fly kompajliranje. Sve .cs (.vb) source fajlove koje stavis u App_Code folder u rootu aplikacije ce biti kompajlirani dinamicki od strane asp.net-a kad se aplikacija podize. Tu npr mozes da stavis klasu sa kontrolom.