# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > مقالات مرتبط با Microsoft .Net Framework >  مقاله جامع: User Control ها و Custom Control ها در ASP.NET

## Behrouz_Rad

*قسمت اول:*
امکان ایجاد و استفاده از User Control ها یا همان کنترل های سفارشی ایجاد شده توسط کاربر، از قدیم الایام در زبان های برنامه نویسی وجود داشته.
تکنولوژیASP.NET که به صورت تعاملی با زبان های مبتنی بر پلت فرم دات نت استفاده میشود نیز از این قاعده مستثنا نیست.
<hr>
یکی از عوامل مهمی که در بالا بردن کارایی برنامه موثر است، امکان استفاده مجدد و بهنیه از عناصری است که به صورت مکرر در برنامه مورد استفاده قرار می گیرند.

*اصطلاح Reuse:* به معنای *استفاده مجدد* و تکنیکی است برای جلوگیری از ایجاد مجدد عناصری که مورد استفاده زیادی چه در برنامه برنامه نویس و چه در برنامه های دیگر دارند.
تکنیک Reuse، نیاز به تکرار مجدد کدها را در برنامه از بین می برد.
<hr>

*:User Controls*
تکنیک Reuse در ASP کلاسیک، با اضافه کردن دستور INCLUDE# به ابتدای صفحه میسر بود.

&lt;!-- #include file = "filename.inc" -->

استفاده از این روش، مقداری نسنجیده است و مثلا ممکن است در debug کردن برنامه مشکلاتی به وجود آید.
کارایی کنترلهایی که به وسیله ASP.NET ایجاد می شوند نیز قابل قیاس با ASP کلاسیک نیست.
نکته: در ASP.NET همچنان قادر به استفاده از دستور INCLUDE# هستید.
ASP.NET به منظور معنای واقعی بخشیدن به تکنیک Reuse، ایجاد و استفاده از User Control ها را در برنامه میسر می سازد.
یک User Control شامل تگ های HTML، اسکریپت های سمت سرور و احیانا کنترل های ASP.NET است. تمامی این تگ ها، اسکریپت ها و کنترل ها، در فایلی با پسوند *ascx* قرار می گیرند.
ASP.NET با User Control همانند یک شی یا عنصر معمولی رفتار خواهد کرد.
User Control ها می توانند دارای خواص (Properties) و متد (Method) باشند. به روال ها پاسخ و در مقابل رویدادها از خود عکس العمل نشان دهند.
یکی از مزایای User Control ها این است که می توانند در حافظه سرور با استفاده از دایرکتیو OutputCache، کش شوند که این عمل در بالا بردن سرعت دسترسی و افزایش Performance برنامه تاثیر بسزایی دارد.
مثال 1:
به عنوان اولین مثال، User Control زیر به منظور ایجاد تعدادی لینک به صفحات مختلف ایجاد شده است:

&lt;%@ Control Language="vb" %>
&lt;table cellpadding="0" cellspacing="0">
   &lt;tr>
      &lt;td valign="top">
         &lt;strong>Links&#58;&lt;/strong>&lt;br/>
         &lt;hr width='80%'>
         &lt;a href="myPage.aspx" 
            onmouseover="img1.src='myImage1.jpg';"
            onmouseout="img1.src='myImage2.jpg';">
            &lt;img border='0' src='myImage2.jpg' id='img1' name='img1'>&lt;/a>
         &lt;a href="myPage.aspx" 
            onmouseover="img1.src='myImage1.jpg';" 
            onmouseout="img1.src='myIamge2.jpg';">my Link&lt;/a>
         &lt;hr width='80%'>
      &lt;/td>
   &lt;/tr>
&lt;/table>

در مثال فوق، به استثنای دایرکتیو Control@ (که می تواند استفاده نشود)، بقیه کدها، کدهای شامل تگ های HTML و اسکریپت های سمت کلاینت هستند (به منظور سویچ عکس)
نکته: نقش دایرکتیو Control در User Control دقیقا همانند نقش دایرکتیو Page در صفحات aspx است 
User Control ها به دو طریق قابلیت اضافه شدن به وب فرم را دارند.
1) با شامل کردن دایرکتیو Register به ابتدای صفحه aspx
2) با استفاده از متد LoadControl کلاس TemplateControl

مثال 2:
مثال بعد، ازدایرکتیو Register به منظور استفاده از User Control مثال 1 در وب فرم استفاده می کند.

&lt;%@ Page Language="vb" %>
&lt;%@ Register TagPrefix="myControl" TagName="myLinks" Src="myUserControlFileName.ascx" %>
&lt;html>
&lt;head>
&lt;/head>
&lt;body>
   &lt;table border="1" width="100%" cellpadding="20" cellspacing="0">
      &lt;tr>
         &lt;td align="center" width="150">
            &lt;img src="myImage.jpg"/>
         &lt;/td>
         &lt;td align="center">
            &lt;h1>User Control Page&lt;h1>
         &lt;/td>
      &lt;/tr>
      &lt;tr>
         &lt;td width="150">
            &lt;myControl&#58;myLinks runat="server"/>
         &lt;/td>
         &lt;td>
            Contents
            &lt;br/>&lt;br/>&lt;br/>&lt;br/>&lt;br/>&lt;br/>&lt;br/>&lt;br/>&lt;br/>
         &lt;/td>
      &lt;/tr>
   &lt;/table>
&lt;/body>
&lt;/html>

در مثال فوق با تعریفی که از User Control در دایرکتیو Register آمده، کامپایلر ASP.NET به دنبال تگ های &lt;myControl:myLinks> با خاصیت سمت سروری (runat="server") در صفحه می گردد و در صورت پیدا شدن، پس از پردازش User Control، خروجی پردازش را در جایی که User Control بر روی وب فرم قرار داده شده، نمایش می دهد.

مثال 3:
در مثال بعد، طریقه استفاده پویا (Dynamic) از User Control با استفاده از متد LoadControl نشان داده شده است.
نکته: بهتر است User Control به یک کنترل PlaceHolder اضافه شود. در این صورت، تعیین مکان دقیق قرارگیری User Control بر روی وب فرم به آسانی میسر می شود.

&lt;%@ Page Language="vb" %>
&lt;html>
&lt;head>
   &lt;script runat="server">
      Sub Page_Load&#40;  &#41;
         PlaceHolder.Controls.Add&#40;LoadControl&#40;"myUs  erControlFileName.ascx"&#41;&#41;
      End Sub
   &lt;/script>
&lt;/head>
&lt;body>
   &lt;table border="1" width="100%" cellpadding="20" cellspacing="0">
      &lt;tr>
         &lt;td align="center" width="150">
            &lt;img src="myImage.jpg"/>
         &lt;/td>
         &lt;td align="center">
            &lt;h1>User Control Page&lt;h1>
         &lt;/td>
      &lt;/tr>
      &lt;tr>
         &lt;td width="150">
            &lt;asp&#58;placeholder id="PlaceHolder" runat="server"/>
         &lt;/td>
         &lt;td>
            Contents
            &lt;br/>&lt;br/>&lt;br/>&lt;br/>&lt;br/>&lt;br/>&lt;br/>&lt;br/>&lt;br/>
         &lt;/td>
      &lt;/tr>
   &lt;/table>
&lt;/body>
&lt;/html>

در قسمت دوم مقاله، توضیحات کاملتری در مورد User Control ها و ایجاد خواص و متدهای سفارشی آنها داده خواهد شد.

----------


## aakh1361

اقا بهروز ما منتظر دومیش هستیم

----------


## amir master

خوبه ممنون

----------


## PrinceDotNet

دومیش چی شد ؟

----------


## golihaghighi

بقیه اش چی شد؟
لطفا ادامه بده

----------


## miladr

آقا بهروز مقاله خوبی بود حیف کف ادامه ندادی اما من یه سوال می کنم انشالا که با جواب این دوباره استارت بزنی.
سوالم اینه تویه مثلا dotnetnuke ما در حالت ویرایش صفحه میگیم که usercontrol1 رو به placeholder1 اضافه کن اینارو چطوری تو دیتابیس ذخیره می کنیم که وقتی صفحه خواست لود شه کنترل ها رو اضافه کنه.

----------


## Behrouz_Rad

سوالت رو در یک تاپیک جدا در بخش ASP.NET مطرح کن.

----------


## meysampaknahad

سلام 
مقاله خوبی بود.
منتظر دومیش هستم.

----------


## battak

درسته این تاپیک قدیمی هستش، ولی چرا ادامه داده نشده!!!

----------


## suncity

سلام
میخوام یه یوزر کنترلی که داخل این پروژه نیست رو با کد نویسی توی فرم نمایش بدم
باید چیکار کنم؟
خیلی مهمه، تورو خودا کمک

----------


## ParsaNM

دوست عزيز 
خيلي مقاله جالبيه لطفا ادامه بده ...!

----------


## hashemt4

سلام دوستان
کسی مطلبی در مورد ASP.Net Server Controls داره یا لینک آموزش؟

اگر کسی کار کرده لطفا ایمیل بزنه و راهنمایی کنه: Hajizadeh.ir@Gmail.com
ممنون

----------


## uthman

سلام خدمت همه دوستان .اگه کسی لطف کنه آموزش user controler رو از صفر بگه ممنونش میشم .با یک مثال عملی؟

----------

