[ ads @ 02.01.2007. 10:03 ] @
Srećna Nova godina svima.

Imam jedan veeeliki problem i prosto ne verujem da do sada nisam naišao na njega. Kada dodam kontrolu i event handler za nju u Page Load-u sve je ok, međutim kada mi je potrebno da se kontrole prave po izboru korisnika handler jednostavno ne radi. Na par foruma sam pročitao da je se događaji ne mogu registrovati nakon Page Load-a. Da li je tu kraj price? :)
Evo mali kod ko hoce da proba.

Code:

<%@ Page Language="C#" %>
<script runat="server">
    protected void Page_Load(object sender, EventArgs e)
    {
        LinkButton runtimeLK = new LinkButton();
        runtimeLK.Text = "Load";
        runtimeLK.Click += new EventHandler(runtimeLK_Click);
        this.runtime.Controls.Add(runtimeLK);
    }
    protected void LK_Click(object sender, EventArgs e)
    {
        LinkButton runtimeLK = new LinkButton();
        runtimeLK.Text = "Click";
        runtimeLK.Click += new EventHandler(runtimeLK_Click);
        this.runtime.Controls.Add(runtimeLK);
    }
    void runtimeLK_Click(object sender, EventArgs e)
    {
        this.txtMsg.Text = ((LinkButton)sender).Text;
    }
</script>

<html>
    <head>
        <title>Test</title>
    </head>
    <body>
        <form id="Test" runat="server">
            <div>
                <asp:LinkButton ID="LK" runat="server" OnClick="LK_Click" Text="Add" />
                <div ID="runtime" runat="server" />
                <asp:TextBox ID="txtMsg" runat="server" />
            </div>
        </form>
    </body>
</html>
[ Dejan Vesic @ 03.01.2007. 07:37 ] @
Sve te akcije odradi u Page_Init event handleru.
[ ads @ 03.01.2007. 16:28 ] @
Izvini možda se nisam dobro izrazio. Ja sam u ovom kodu napravio linkbutton na čiji klik treba dodati kotrolu i handler. Dakle baš mi je tako nešto potrebno: kada korisnik klikne na link, dodaj različite kotrole i hvataj njihove događaje.
[ Dejan Vesic @ 03.01.2007. 16:50 ] @
Kako verovatno na jedan klik dodaješ uvek iste kontrole, zašto ne uradiš sledeće:

- staviš SVE kontrole i sve hendlere na stranu
- grupišeš one koje se "pojave" u okviru panela
- u startu sakriješ taj panel ( .Visible = false)
- na klik ga otkriješ

?

Time ćeš izbeći sve probleme sa dinamičkim dodavanjem kontrola i hendlera.
[ jablan @ 03.01.2007. 23:08 ] @
Citat:
ads: Dakle baš mi je tako nešto potrebno: kada korisnik klikne na link, dodaj različite kotrole i hvataj njihove događaje.

Dejan ti je lepo odgovorio da se to što hoćeš (mada nisi tačno rekao šta ustvari hoćeš da postigneš, tj. koju funkcionalnost hoćeš da omogućiš korisniku) radi drugačije.

Ja da probam da objasnim zašto ne radi onako kako si zamislio.

Nije problem da napraviš kontrolu u event handleru, ni da joj postaviš event handler. Problem je što taj event handler treba da bude postavljen i u postbacku, tj. kad korisnik klikne na tu dinamički kreiranu kontrolu. Da bi on bio postavljen, tu kontrolu treba da kreiraš i u postbacku: kad u ASP.NETu kreiraš kontrolu dinamički, ona postoji samo u tom ciklusu, da bi postojala i u sledećem postbacku moraš opet da je kreiraš. Mislim da možeš i u page.onload eventu ali treba probati.

Svakako ti je mnogo lakše da radiš kao što je Dejan rekao. Treba napomenuti da se, kada se postavi Visible property kontrole na false, ta kontrola uopšte i ne renderuje, tj. situacija nikako nije ekvivalenta onoj kad u HTML-u postavite display:none.
[ Shevchenko @ 04.01.2007. 02:08 ] @
Citat:
Dejan Vesic: Kako verovatno na jedan klik dodaješ uvek iste kontrole, zašto ne uradiš sledeće:

- staviš SVE kontrole i sve hendlere na stranu
- grupišeš one koje se "pojave" u okviru panela
- u startu sakriješ taj panel ( .Visible = false)
- na klik ga otkriješ

?

Time ćeš izbeći sve probleme sa dinamičkim dodavanjem kontrola i hendlera.

Definitivno najjednostavniji i najbolji nacin! :)

[Ovu poruku je menjao Shevchenko dana 04.01.2007. u 03:27 GMT+1]