2009-10-23 16 views
22

Wiem, że ClientID jest używany dla javascript i UniqueId dla strony serwera, a to ID klienta używa podkreślenia (_), a UniqueId używa znaku dolara ($) w asp.net 2.0. Ale nie rozumiem, dlaczego używam dwóch różnych identyfikatorów. Dlaczego nie można po prostu LUB użyć znaku podkreślenia LUB użyć znaku dolara zarówno po stronie serwera, jak i klienta. Czy ktoś może to wyjaśnić?C# asp.net Dlaczego istnieje różnica między identyfikatorem klienta a identyfikatorem unikalnym?

Odpowiedz

12

(W uzupełnieniu do mojego oryginalnego odpowiedź powyżej)

Cóż, jak zapewne wiesz UniqueID jest używany z atrybutem name i ClientID z atrybutem id wytopionego tagu HTML. UniqueID używa dwukropka jako separatora. Z drugiej strony ClientId używa podkreślenia jako separatora, ponieważ dwukropek nie jest dozwolony w nazwach zmiennych JavaScript. Identyfikator klienta jest rzeczywiście unikatowy na stronie jako unikalny identyfikator, ale identyfikator klienta jest ukierunkowany na przetwarzanie po stronie klienta i unikalny identyfikator dla serwera (całkiem oczywiste), przy czym ten ostatni szczególnie kieruje się do danych zwrotnych i zdarzeń za pomocą złożonych formantów

Jednak Myślę, że niektóre rozumowanie może polegać na tym, że używanie znaku podkreślenia jako separatora w zwykłych identyfikatorach kontrolnych jest dość powszechnym zachowaniem, a zatem podkreślenia nie można używać w UniqueID jako separatora kontrolnego (jeśli teoretycznie myślimy, że zarządzamy jedną własnością), ponieważ nie można rozróżnić między kontrolami. Z drugiej strony, z tego samego rozumowania, nie można używać dwukropka w identyfikatorach kontrolnych, struktura strony nie pozwala na to, dzięki czemu upewnia się, że dwukropki nie mogą dostać się do identyfikatora klienta (było to spowodowane tym, że JavaScript go nie lubi) .

Z tych względów dwukropek jest całkiem dobrym wyborem do użycia w UniqueID, ponieważ metoda FindControl może używać go do nawigacji w drzewie kontrolnym i lokalizowania kontrolek (może łatwo podzielić identyfikator UniqueID).

6

thisUniqueID to nazwa kontrolki dołączona do wszystkich kontenerów nazw, uważa ją za w pełni kwalifikowaną nazwę kontrolną. this.ClientID jest wartością , która pojawi się w atrybucie id formantu, jest to tłumaczenie uniqueid, które jest tagiem id (hmm) zgodnym z html (prowadząc do podkreślenia , które nie są zgodne z html).

+0

Zatem, podkreślenia wiodące nie są (naprawdę) zgodne z html. Dlaczego więc nie używać znaków dolara? Dlaczego nie używać ID klienta po stronie serwera zamiast UniqueId? Obie są dokładnie takie same, jedyną różnicą jest użycie znaku dolara i podkreślenia. – Martijn

+0

Identyfikator klienta ma na celu zwrócenie unikalnego identyfikatora kontrolki (jest to odpowiednik UniqueID, ale używa podkreślenia jako separatora kontrolnego), który może być używany w skryptach po stronie klienta. – JamesM

+1

Myślę, że nie rozumiesz mojego punktu widzenia :) Javascript nie lubi znaków dolara i dlatego używa podkreśleń. Teraz to jasne. Moje następne pytanie brzmi: dlaczego nie używać podkreśleń po stronie serwera? Dlaczego więc nie używać ClientID na serwerze? Dlaczego musi istnieć osobna nieruchomość, która używa znaków dolara? Dlaczego podkreśleń nie można użyć na serwerze? – Martijn

Powiązane problemy