اگر مطلب تبديل پلاگينهاي جيكوئري به كنترلهاي ASP.Net را مطالعه كرده باشيد، در مورد ClientID بحث شد. با مراجعه به اصول HTML درخواهيم يافت كه هر كنترل يا شيء مربوطه ميتواند شامل ID و name باشد. عموما در كدهاي جاوا اسكريپتي براي دسترسي به يك شيء در صفحه از ID آن شيء به صورت document.getElementById استفاده شده و از name براي پردازشهاي سمت سرور استفاده ميشود. براي مثال اگر به دوران ASP كلاسيك برگرديم، از شيء Request براي دريافت مقادير ارسال شده به سرور با استفاده از name شيء مورد نظر استفاده ميشد/ميشود.
در حالت فرمهاي معمولي ، ID و name عموما يكسان هستند. اما اگر از master page ها استفاده شود يا از يك user control براي تركيب چندين كنترل كمك گرفته شود، ديگر ID و name در فرم رندر شده نهايي ASP.Net يكسان نخواهند بود. براي مثال:
<input name="ctl00$ContentPlaceHolder1$txtID" type="text" id="ctl00_ContentPlaceHolder1_txtID" />
public virtual string ClientID
{
get
{
this.EnsureID();
string uniqueID = this.UniqueID;
if ((uniqueID != null) && (uniqueID.IndexOf(this.IdSeparator) >= 0))
{
return uniqueID.Replace(this.IdSeparator, '_');
}
return uniqueID;
}
}
<Container>$<Container>$<Container>$<Container>$...$<ID>
اين نكته در طراحي كنترلهاي ASP.Net كه از كدهاي جاوا اسكريپتي استفاده ميكنند بسيار مهم است. در تست اول و با يك صفحه ساده كنترل شما خوب كار خواهد كرد. اما اگر همين كنترل را بر روي يك صفحه مشتق شده از يك master page قرار دهيد، ديگر ID آن يافت نشده و كدهاي جاوا اسكريپتي شما كار نخواهند كرد. به همين جهت اگر قرار است قسمت جاوا اسكريپتي كنترل شما توسط كنترل به صورت خودكار ايجاد شود و در اين كد ارجاعي به شيء جاري وجود دارد، اين شيء جاري با استفاده از ClientID آن در سمت كلاينت قابل دسترسي خواهد بود و نه با استفاده از ID سمت سرور و يا UniqueID آن.