هنگام طراحی صفحه ها مواردی پیش می آید که اجزای صفحه هنگام نمایش دقیقا ً مشخص نیستند . مثلا ً می خواهیم مشخصات یک کاربر را وارد سیستم کنیم بدین شکل که اگر در dropdown انتخاب شد که کاربر مدیر سیستم است مشخصات مدیر را باید برای وی پر کنیم ، اگر مشخص شد که کاربر مدیر پروژه است مشخصات دیگری برای ورود اطلاعات نمایش داده می شود و الی آخر . راه های مختلفی برای پیاده سازی این کار وجود دارد که یکی از آنها استفاده از کنترل های پویا است . کنترل هایی که به انتخاب کاربر روی صفحه نمایش داده می شوند . استفاده از کنترل های پویا در ASP.NET و خواندن اطلاعات آنها بعد از Postback می تواند به یک مشکل زمان اجرای نرم افزار تبدیل شود .
تمامی کنترل ها در ASP.NET در هر بار load شدن صفحه می بایست دوباره روی صفحه نوشته شوند . اگر این کار انجام نشود بعد از postback یک صفحه سفید خواهیم داشت ! کنترل های استاندارد asp.net اگر زمان طراحی روی صفحه باشند به شکل خودکار این کار را انجام می دهند ولی وقتی خودمان کنترلی را به شکل پویا به صفحه اضافه می کنیم هر بار در زمان load می بایست کنترل را بسازیم .
می خواهیم یک User Control داشته باشیم که به هر تعدادی که کاربر نیاز داشت روی صفحه نمایش داده شود . کاربر اطلاعات خود را وارد کرده ، سپس آنرا ذخیره کند . حالت دیگر هم زمانی است که مثلا ً می خواهیم اطلاعات ذخیره شده در بانک اطلاعاتی را به این روش ، برای ویرایش ، روی صفحه نمایش دهیم .
در ویژوال استودیو 2008 یک پروژه وبی جدید ایجاد و یک User Control به نام MyUserControl به آن اضافه می کنیم . در User Control یک Textbox قرار داده و این کد را در code behind آن می نویسیم .
Public Property MyText() As String
Get
Return TextBox1.Text
End Get
Set(ByVal value As String)
TextBox1.Text = value
End Set
End Property
یک property که مقدار textbox را با آن بتوان خواند و نوشت .
نکته : اگر می خواهید مثل همین textbox اطلاعاتی در label ذخیره کنید باید یک Hidden Field هم برای هر label روی صفحه قرار دهید و در GET از مقدار hidden field بخوانید . من هر تلاشی کردم مقدار label بعد از postback از بین می رفت .
در یک Web Form یک کنترلی که Container باشد مثلا ً PlaceHolder قرار می دهیم . یک DropDown برای تعداد کنترلهای مورد نیاز که مقادیر آن هم دستی پر شده است . یک button برای نمایش تعداد درخواستی (set) ، یکی برای خواندن اطلاعات از user control ها (get) و دیگری برای خواندن از بانک اطلاعاتی (load) .

برای اضافه کردن user control به container یک سابروتین لازم است که نامش CreateThem است . اگر در CreateThem گفتیم که اطلاعات را از بانک اطلاعاتی بخوان ، در زمان ساخت کنترل ها اطلاعات آنها را هم پر می کند .
Private Sub CReateThem(Optional ByVal Vals As Boolean = False)
PlaceHolder1.Controls.Clear()
For i As Integer = 1 To DropDownList1.SelectedValue
Dim x As Control = Me.LoadControl("myUserControl.ascx")
x.ID =
"T" & i.ToString
PlaceHolder1.Controls.Add(x)
If Vals Then
CType(x, myUserControl).MyText = i.ToString
End If
Next
End Sub
اطلاعات پر شده در اینجا شماره اندیس در حلقه است .
در رویداد Load صفحه تابع createThem را صدا می زنیم .
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
CReateThem()
End Sub
در رویداد click در کلید GET این خطوط را می نویسیم .
For Each c As Control In PlaceHolder1.Controls
If TypeOf c Is myUserControl Then
Response.Write(
CType(c, myUserControl).MyText & "<br>")
End If
Next
دکمه Set احتیاج به هیچ رویداد ندارد ، فقط Postbackی که ایجاد می کند کافی است .
در دکمه Load هم می گوییم CreateThem(True) .
نمونه اجرا شده مانند شکل زیر است .

البته با روشهای دیگری هم می توان این کار را انجام داد ، مثلا ً استفاده از GridView ، یا استفاده از رویداد Init در صفحه میزبان .