[ kopca @ 14.10.2005. 16:58 ] @
Imam sledeci isecak koda u asp serverskoj kontroli - gridu:

Code:
<asp:TemplateColumn>
                        <ItemTemplate>
                            <asp:TextBox ID="txt1" Runat="server">text</asp:TextBox>
                        </ItemTemplate>
                    </asp:TemplateColumn>


Ovo je _ItemCreated event.

Code:
private void OrdersDBGrid_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
        {    
            switch (e.Item.ItemType)
            {
                case ListItemType.Header:
                    break;
                case ListItemType.Footer:
                    break;
                case ListItemType.Pager:
                    break;
                case ListItemType.Separator:
                    break;
                default:
                    IEnumerator en = e.Item.Cells[6].Controls.GetEnumerator(); 
                    while (en.MoveNext())
                    {
                        if ((en.Current is TextBox))// && ((TextBox)en.Current).ID=="txt1")
                        {
                            ((TextBox)en.Current).Attributes.Add("onBlur","alert('" +  ((TextBox)en.Current).ClientID.ToString() +"')");
                        }
                    }
                    break;    
                
            }
            L_Error.Text = ordersDB1.ErrorMessage;
        }


Kad gledam krajnji HTML u Exploreru - View Source - dobijam za textboxove sledece ID-ove za inpute napravljene od txtboxova:

Code:
 id="OrdersDBGrid__ctl12_txt1" i 


i za name:

Code:
name="OrdersDBGrid:_ctl12:txt1"


Moja pitanja:

1. Kako da dodjem do punog klijentskog ID slaganjem ClientID eva kroz stablo kontrola - treba mi da bih u svaki pojedinacni input ubacio JavaScript "onBlur"?
2. Cemu sluzi name, a cemu ID?
3. Zasto se u ID pojavljuju donje underscore-ovi a u name i ":"?
[ majstor_01 @ 14.10.2005. 20:33 ] @
Bez potrebe si izkompilovao kod...
Ako ti je textBox ID = "Txt"
Onda ides

TextBox tb = (TextBox) e.Item.Cells[6].FindControl("Txt")'
tb.Attributes.Add("onBlur","alert('" + tb.ClientID+"')");

ID je za jedinstveno prepoznavanje na strani klijenta.
Name je za stranu servera i mora da postoji kod serverski kontrola. HTML kontrole nemaju Name.


[Ovu poruku je menjao majstor_01 dana 14.10.2005. u 21:35 GMT+1]
[ kopca @ 17.10.2005. 12:23 ] @
Citat:
Moja pitanja:

1. Kako da dodjem do punog klijentskog ID slaganjem ClientID eva kroz stablo kontrola - treba mi da bih u svaki pojedinacni input ubacio JavaScript "onBlur"?


Hvala na odgovoru. Ali jos nisam resio svoju glavnu dilemu... Iz citata.
[ jablan @ 17.10.2005. 12:51 ] @
Pa ClientID je valjda "pun" klijentski ID...
[ noviKorisnik @ 17.10.2005. 13:11 ] @
Ako ne znaš koji će ti idovi biti izgenerisani, a želiš da ubaciš onblur na svaki input, postaviš JS na stranicu...
Code:
<script>
window.onload = function ()
{
    var inputs = document.getElementsByTagName ('INPUT');
    for (var i = 0; i < inputs.length; i++)
    {
        inputs [i].onblur = inputblur;
    }
}
function inputblur ()
{
    //  štogod
}
</sctipt>
[ kopca @ 17.10.2005. 13:34 ] @
Ok je to resenje... Samo to je alternativa. Mene bas interesuje kako na serveru to uz pomoc C# da uradim, tj. kako ASP.NET pravi klijentski ID nesto_nesto:_nesto... Jer .ClientID nije "pun" naziv. Pun naziv se stvara od stabla kontrola kojem pripada taj txtbox. Pokusajte da simulirate to na nekoj strani, pa cete videti. A i napisao sam u prvom pitanju sa kodom kako tacno izgleda jedan id u krajnjem HTML-u. U Exploreru - View Source...
Cini mi se da ima veze sa kontejnerima kontrola...

Citat:
Code:
id="OrdersDBGrid__ctl12_txt1" i
[ jablan @ 17.10.2005. 14:37 ] @
Naravno, klijentski ID je sastavljen od "putanje" po kontejnerima (isključivo iz razloga da bi ID bio jedinstven kad se stranica izrenderuje). ClientID ima isti sadržaj (da, probao sam).

Moj savet ti je da se ne ulaziš u to šta ClientID sadrži. Ako imaš potrebe za javascriptom, koristi ClientID i to će raditi.

Najbolje da tačno napišeš šta hoćeš, odnosno da okačiš deo koda koji ti ne radi to što hoćeš da radi.

edit: nedvosmislenost

[Ovu poruku je menjao jablan dana 17.10.2005. u 15:52 GMT+1]
[ jablan @ 17.10.2005. 14:43 ] @
Code:

private void Repeater1_ItemDataBound(object sender,
 System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
    TextBox tb = new TextBox();
    tb.ID = "tb";
    e.Item.Controls.Add(tb);
    tb.Attributes.Add("onblur", "alert('" + tb.ClientID + "')");
}
[ jablan @ 17.10.2005. 14:48 ] @
Ili, ako su ti u templejt već ubačeni tekst boksovi:
Code:

private void Repeater1_ItemDataBound(object sender, 
 System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
    TextBox tb = (TextBox) e.Item.FindControl("t");
    tb.Text = e.Item.DataItem.ToString();
    tb.Attributes.Add("onblur", "alert('" + tb.ClientID + "')");
}

OK?
[ noviKorisnik @ 17.10.2005. 16:10 ] @
Citat:
kopca: 2. Cemu sluzi name, a cemu ID?

Sve je ovo na klijentu :-)

Atribut name je identifikacija elementa formulara... Prilikom prosleđivanja formulara serveru šalju se parovi name-value za one elemente koji imaju name atribut - radi primera, na Submit dugme ne stavljam name jer mi to nije potrebno za serversku obradu.

Atribut id bi trebalo da bude jedinstven obeležje elementa u dokumentu.