محتویات سایت
        برچسب های محبوب 








 
   تفاوت بین سه صفت ID و UniqueID و ClientID در کنترل های وب
  هنگام کار با کنترل های ASP.NET حتما متوجه شده اید که تمام کنترل ها دارای 3 صفت ID و UniqueID و ClientID می باشند که هر سه این صفت ها دارای مقداری منحصر به فرد می باشند...
   ASP.NET
   ۲۹۰۹۵
   این مقاله حاوی فایل ضمیمه نمی باشد
   مرتضی صحراگرد
   ۱۳۸۶/۸/۵
نسخه قابل چاپ نسخه قابل چاپ

هنگام کار با کنترل هاي ASP.NET حتما متوجه شده ايد که تمام کنترل ها داراي 3 صفت ID و UniqueID و ClientID مي باشند که هر سه اين صفت ها داراي مقداري منحصر به فرد مي باشند.
شايد اين سوال در ذهن شما پيش آمده باشد که کاربرد اين سه صفت چيست؟

ID :

با صفت ID همگي آشنايي داريم. اين صفت جهت مقداردهي و دسترسي به کنترل هاي وب، هنگام برنامه نويسي کارايي دارد. 

UniqueID :

براي توضيح عملکرد UniqueID از يک مثال استفاده مي کنم. فرض کنيد يک کنترل Repeater داريد که داراي ItemTemplate مي باشد و در داخل اين ItemTemplate  يک عدد TextBox داريد که تعداد محصول خريداري شده و يک کنترل Label داريد که نام محصول خريداري شده را نگهداري مي کند.
اکنون فرض کنيد يک مشتري 5 نوع محصول مختلف خريداري نموده است. يعني ItemTemplate  ما 5 مرتبه تکرار شده است و ما 5 عدد TextBox و 5 عدد Label داريم که تعداد محصول هاي خريداري شده و نام هريک را نگهداري مي کنند. مشکل اينجا به وجود مي آيد که  اين TextBox ها داخل Repeater به وجود آمده اند، پس ما به هر کدام از اينها يک ID منحصر به فرد نداده ايم و داراي نام هاي يکساني مي شوند پس چگونه بايد به محتواي يک TextBox خاص دسترسي پيدا کنيم؟!
اين مشکل توسط ,UniqueID حل مي شود. اين صفت به طور اتوماتيک توليد شده و باعث تمايز اين TextBox ها از يکديگر مي شود. پس يکي از کاربردهاي اين صفت در کنترل هايي مانند Repeater و GridView و Wizard و غيره که داده هاي سلسله مراتبي (hierarchy) توليد مي کنند، مي باشد.
مقدار صفت UniqueID به طور مثال مي تواند به صورت "CreateUserWizard1$CreateUserStepContainer$Email" باشد.
همانطور که مي بينيد مقدار معمولا طولاني مي باشد که تشکيل شده است از نام کنترل هاي والد (Parent) آن، که با علامت $ از هم مجزا شده اند.
با اين وجود يک مشکل ديگر وجود دارد و آن اين است که علامت $ در HTML از لحاظ فني يک کاراکتر غير معتبر مي باشد. و ما اگر بخواهيم از اين صفت در سمت مشتري (Client) استفاده نماييم (معمولا درجاوااسکريپت و آژاکس) ، دچار مشکل مي شويم.

ClientID :

صفت ClientID اين مشکل را حل مي نمايد. اين صفت، کاراکتر $ در صفت UniqueID را با علامت "_" که يک کاراکتر معتبر مي باشد، جايگزين مي نمايد. يعني مقدار ClientID شبيه اين مي باشد "CreateUserWizard1_CreateUserStepContainer_Email".
پس اين مشکل نيز رفع شد و ما مي توانيم با استفاده از جاوا اسکريپت به راحتي به مقدار هر کنترلي دسترسي داشته باشيم.