ایجاد کنترل ها با استفاده از اسکریپت
برای ایجاد یک کنترل با استفاده از اسکریپت در ابتدا می بایست یک شی کنترل را به عنوان یک نوع کنترل تعریف نمود . نوع کنترل را می توان یکی از نوع های استاندارد کنترل های سرویس دهنده در نظر گرفت . مثلا" برای یک ایجاد یک کنترل <asp:label> ، می بایست آن را به عنوان یک نوع label ، برای ایجاد یک کنترل <asp:button> ، آن را به عنوان یک نوع button و برای ایجاد یک کنترل <asp:TextBox> آن را به عنوان یک نوع TextBox تعریف کرد .
کد زیر نحوه تعریف یک کنترل را نشان می دهد :
Dim MyLabel As New Label |
کنترل <asp:PlaceHolder>
پس از ایجاد یک کنترل ، به منظور نمایش آن بر روی صفحه می بایست آن را به یکی از مجموعه های Controls اضافه نمود . صفحه، دارای یک مجموعه کنترل با نام page.collection است که تمامی کنترل های موجود در یک صفحه و سایر کنترل های جدیدی را که در ادامه می توان به اضافه نمود را شامل می شود . معمولا" ترجیح داده می شود که یک ناحیه خاص بر روی صفحه تعریف و در ادامه کنترل های جدیدی را به آن اضافه نمود .
کنترل <asp:PlaceHolder> ، ناحیه ای را مشخص می نماید که می توان کنترل های ایجاد شده به صورت پویا را در آن قرار داد . با نسبت دادن یک کنترل به مجموعه کنترل PlaceHolder ، امکان مشاهده کنترل بر روی صفحه فراهم می گردد .
کد زیر نحوه ایجاد یک کنترل PlaceHolder را نشان می دهد .
<asp:PlaceHolder id="id" Runat="Server"/> |
کنترل PlaceHolder خود فضائی را بر روی صفحه اشغال نخواهد کرد و صرفا" ناحیه ای را بر روی صفحه به منظور افزودن کنترل های پویا ، رزو می نماید . به کنترل فوق می بایست یک id نسبت داده شود تا امکان دستیابی به آْن از طریق اسکریپت فراهم گردد .
اضافه کردن کنترل به یک PlaceHolder
پس از تعریف یک PlaceHolder ، با استفاده از متد Add می توان کنترل مورد نظر را به آن اضافه نمود . کد زیر نحوه استفاده از متد Add کنترل PlaceHolder را نشان می دهد .
PlaceholderId.Controls.Add(Control) |
PlaceHolderId ، شناسه ( id ) کنترل PlaceHolder است که از طریق آن می توان به کنترل دستیابی داشت. Control ، نام کنترلی که می بایست به صورت پویا به صفحه اضافه گردد .
در مثال زیر ، یک PlaceHolder تعریف و در ادامه یک کنترل label جدید ایجاد و به PlaceHolder اضافه شده است .
<SCRIPT Runat="Server"> |
کنترل label بر روی صفحه و در مکان مشخص شده توسط PlaceHolder نمایش داده می شود . در ادامه می توان کنترل های دیگری را با استفاده از اسکریپت تولید و به PlaceHolder اضافه نمود ( در خطوط بعد از کنترل label نمایش داده می شوند ) . در صورت نیاز می توان چندین کنترل PlaceHolder را تعریف و در مکان های مختلف صفحه مستقر نمود تا در ادامه بتوان کنترل های تولید شده توسط اسکریپت را در هر یک از آنها با توجه به ضرورت های موجود ، اضافه نمود .
با توجه به این واقعیت که کنترل های تولید شده توسط اسکریپت به عنوان بخشی از view state صفحه در نظر گرفته نخواهند شد ، می بایست برای ایجاد آنها از روتین Page_load استفاده گردد .
دستیابی به خصلت های یک کنترل توسط اسکریپت
در مثال قبل ، کنترل label به صورت پیکربندی پیش فرض و بدون هیچگونه تنظمیات خاصی بر روی صفحه نمایش داده می شود . در صورت تمایل می توان خصلت های مرتبط با یک کنترل را به صورت پویا و به کمک اسکریپت مقداردهی نمود .
کد زیر ، بازنویسی مثال قبلی است که در ابتدا خصلت های متعدد کنترل label مقداردهی و در ادامه کنترل فوق به مجموعه کنترل های PlaceHolder اضافه شده است .
<%@ Import Namespace="System.Drawing" %> |
تولید رویدادهای کنترل توسط اسکریپت
در مواردی که کنترل هائی نظیر Button که به کمک آنها می توان اسکریپت های موجود در یک برنامه را فعال نمود به صورت پویا ایجاد می گردند ، می بایست event handler مورد نظر را به منظور فراخوانی برنامه فرعی نیز مشخص نمود . برای ایجاد یک event handler توسط اسکریپت از کد زیر استفاده می گردد .
AddHandler Control.Event, AddressOf Subprogram |
control ، نام کنترلی است که event handler به آن نسبت داده خواهد شد . Event ، نوع Event handler را مشخص می نماید ( مثلا" Click ) و Subprogram ، نام روتینی است که پس از بروز رویداد می بایست فعال گردد .
در مثال زیر ، پس از تعریف یک Buuton و تنظیم خصلت های آن در زمان اجراء ، یک event handler نیز تعریف شده است تا پس از کلیک بر روی دکمه فوق ، روتین مورد نظر فعال (My_Subprogram ) و پاسخگوی رویداد ایجاد شده باشد .
Dim MyButton As New Button |
در مثال فوق ، یک handler برای رویداد Click به کنترل Button اضافه شده است . My_Subprogram ، روتینی است که پس از بروز رویداد ( کلیک بر روی button ) ، فعال و پاسخگوی رویداد ایجاد شده است .
پس از این که یک Button به صفحه اضافه گردید ( در مکان MyPlaceHolder ) ، عملکرد آن مشابه زمانی است که از یک Button در زمان طراحی استفاده شده باشد:
<asp:Button id="Button1" Text="Click Me" OnClick="My_Subprogram" Runat="Server"/> |
نوع رویداد تولید شده توسط اسکریپت که می توان آن را به کنترل ها اضافه نمود ، همانند event handler استفاده شده به همراه کنترل ها در زمان طراحی است . مثلا" کنترل button قادر به تشخیص دو event handler با نام OnClick و OnCommand است . بنابراین ، می توان با استفاده از اسکریپت دو رویداد فوق را برای یک button تولید نمود . زمانی که یک رویداد Command توسط اسکریپت تولید می گردد ، می توان خصلت های CommandName و CommandArgument را نیز برای button تنظیم نمود .
در بخش دوم به بررسی سایر عملیات در ارتباط با کنترل های پویا خواهیم پرداخت .