عنوان
|
نويسنده
|
مشاهده
|
تعداد
آراء |
امتياز
|
اسكريپت های سمت سرويس گيرنده در صفحات ASP.NET ( بخش دوم ) |
مديريت وب |
10722 |
45 |
3.1 |
با توجه به جایگاه داده در عصر حاضر و لزوم نگاه جامع به این مقوله مهم ، بر آن شدیم تا محوریت فعالیت های خود را بر روی این موضوع متمرکز نمائیم . از این رو گروه فابک با شعار فناوری اطلاعات برای کسب وکار شکل گرفت و خدمات خود را از طریق سایت www.fabak.ir به مخاطبان محترم عرضه می نماید
 |
اسكريپت های سمت سرويس گيرنده در صفحات ASP.NET
اسكريپت های سمت سرويس گيرنده در صفحات ASP.NET ( بخش
دوم )
در بخش
اول به ضرورت استفاده از اسكريپت های سمت سرويس گيرنده در برنامه های وب اشاره
و با نحوه استفاده از اسكريپت های سمت سرويس گيرنده توسط برخی از كنترل های سرويس
دهنده ASP.NET به منظور انجام وظايف از قبل تعريف شده
، آشنا شديم . همچنين
، به اين موضوع اشاره گرديد كه رفتار اسكريپت های سمت سرويس
گيرنده در صفحات ASP.NET در برخی موارد با صفحات
HTML متفاوت است :
-
اضافه كردن
event handler سمت سرويس گيرنده به كنترل های
سرويس دهنده ASP.NET
-
شناسائی و مراجعه به كنترل های
سرويس دهنده از طريق اسكريپت های سمت سرويس گيرنده
-
افزودن اسكريپت های
سمت سرويس گيرنده به صفحه به صورت پويا
-
ايجاد رويداد كليك
سمت سرويس گيرنده برای كنترل های سرويس دهنده
-
اشتراك اطلاعات بين
اسكريپت های سمت سرويس گيرنده و كدهای سمت سرويس دهنده
-
فراخوانی كدهای سمت
سرويس دهنده از طريق اسكريپت های سمت سرويس گيرنده بدون نياز به postback
در
اين بخش به
بررسی موارد اول و دوم مورد خواهيم پرداخت .
اضافه كردن event handler سمت سرويس گيرنده به كنترل های سرويس دهنده ASP.NET
با توجه به اين كه با كنترل های سرويس دهنده ASP.NET
در يك صفحه به عنوان
element برخورد می شود (نوع عنصر تفسير شده توسط يك كنترل به زبان
نشانه گذاری استفاده شده در يك صفحه بستگی دارد : HTML ،
XHTML و يا ... ) ، می توان اسكريپت های سمت سرويس
گيرنده event handler را به كنترل ها همانند ساير عناصر
موجود در صفحه اضافه نمود .
توجه به اين موضوع كه كنترل چگونه خروجی خود را تفسير می نمايد و كدام خصلت را برای
خود رزو نموده است ، حائز اهميت است .
افزودن
event handler سمت سرويس گيرنده به صورت تعريفی
از طريق تگ های كنترل های سرويس دهنده ASP.NET ، می توان با استفاده از
Attributes مقادير مورد نظر خصلت ها را مشخص نمود .
مثلا" برای مقداردهی خصلت Text كنترل
TextBox ، می توان از تگ زير استفاده نمود :
<asp:textbox id="TextBox1" runat="server" text="Sample Text"
/>
|
در صورتی كه از يك
attribute استفاده گردد كه نتوان آن را به يك خصلت خاص
map نمود ، ASP.NET در زمان پردازش سمت سرويس دهنده
از آن صرفنظر نموده و آن
را به عنوان as-is به همراه ساير تگ های
HTML توليد شده برای كنترل سرويس دهنده
به مقصد مرورگر
ارسال می نمايد . مثلا" كنترل TextBox دارای خصلتی با
نام onKeyup نمی باشد . بنابراين در صورتی كه به
همراه كنترل TextBox از خصلت فوق استفاده گردد ،
ASP.NET بدون انجام هيچگونه واكنشی آن را برای مرورگر
سرويس گيرنده ارسال می نمايد . با توجه به نحوه برخورد ASP.NET
با اينچنين خصلت هائی ، می توان رويدادهآی مورد نظر را به كنترل های سرويس
دهنده و از طريق تعريف تگ های مربوطه نسبت داد .
كد زير نحوه استفاده از
يك event handler سمت سرويس گيرنده به همراه كنترل
سرويس دهنده TextBox را نشان می دهد .
پس از درج هر حرف در TextBox
( بروز رويداد ) ، طول آن در يك عنصر
span با نام spanCounter
نمايش داده می شود ( event handler ) .
<%@ Page Language="VB"%>
<html>
<head >
<title>تست يك </title>
</head>
<body>
<form id="form1" runat="server">
<asp:textbox id="TextBox1" runat="server" text="Sample Text"
onkeyup="spanCounter.innerText=this.value.length;"
/>
<Span id="spanCounter" />
</form>
</body>
</html>
|
در صورت ضرورت می توان
event handler سمت سرويس گيرنده را در قالب يك تابع
سازماندهی تا پس از بروز رويداد ( فشردن يك كليد ) مرتبط با يك كنترل سرويس دهنده ،
فعال و وظايف خود را انجام دهد .
<%@ Page Language="VB"%>
<html>
<head >
<title>تست دو </title>
<script type="text/javascript">
function DisplayCount(a)
{
spanCounter.innerText=a.value.length;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:textbox id="TextBox1" runat="server" text="Sample Text"
onkeyup="DisplayCount(this);" />
<Span id="spanCounter" />
</form></body></html>
|
افزودن يك
event handler سمت سرويس گيرنده از طريق برنامه و
در زمان اجراء
در صورت ضرورت می توان
event handler سمت سرويس گيرنده را
از طريق برنامه و در زمان اجراء به يك كنترل سرويس دهنده
ASP.NET اضافه نمود . استفاده از ويژگی فوق در مواردی مفيد است كه رويداد و
يا كد مرتبط با آن به اطلاعاتی
نياز دارند كه صرفا" در زمان اجراء قابل دسترسی است . در چنين مواردی می توان از
رويداده Load و يا Init
صفحه به منظور
اضافه كردن خصلت مورد نظر به يك كنترل
استفاده نمود (استفاده از متد Add )
.
كد زير نحوه اضافه كردن
يك خصلت به يك كنترل سرويس دهنده در زمان اجراء
و به منظور اجرای يك
event handler را نشان می دهد . اسكريپت سمت سرويس
گيرنده طول متن تايپ شده در كنترل TextBox را در هر لحظه نمايش می
دهد . در اسكريپت
فوق ،فرض
شده است كه صفحه دارای يك عنصر
span با نام spanCounter
است .
<%@ Page Language="VB"%>
<html>
<head >
<title>تست سه </title>
<Script RunAt="Server">
Protected Sub Page_Load(ByVal sender As
Object, ByVal e As System.EventArgs)
Dim displayControlName As String = "spanCounter"
TextBox1.Attributes.Add("onkeyup", _
displayControlName &
".innerText=this.value.length;")
End Sub
</Script>
</head>
<body>
<form id="form1" runat="server">
<asp:textbox id="TextBox1" runat="server" text="Sample Text" />
<Span id="spanCounter" />
</form></body></html>
|
افزودن يك رويداد onClick سمت
سرويس گيرنده به كنترل
سرويس دهنده Button
با كليك بر روی كنترل سرويس دهنده button
بلافاصله و به صورت پيش فرض يك postback اتفاق می
افتد تا event handler مرتبط با آن در سمت سرويس دهنده
اجراء گردد . در صورت ضرورت می توان از خصلت OnClientClick كنترل Button ( كنترل هائی نظير
Button , LinkButton و
ImageButton ) ، به منظور معرفی يك event handler
استفاده نمود تا پس از كليك بر روی button ، درابتدا
event handler سمت سرويس گيرنده اجراء
گردد و در ادامه عمليات postback
انجام شود .
كد زير نحوه اضافه كردن يك رويداد كليك سمت سرويس گيرنده به كنترل
Button را نشان می دهد . پس از كليك بر روی
Button يك پيام ارائه و در صورت تائيد
، اطلاعات برای
سرويس دهنده ارسال می گردد . ( با كليك اول ، از يك روتين سمت سرويس گيرنده پرای
پاسخگوئی به آْن استفاده می شود و پس از كليك مجدد بر روی
Button نمايش داده شده در جعبه محاوره ای ، اطلاعات برای سرويس دهنده
ارسال تا متناسب با شرايط برنامه با آنان برخورد شود)
.
<%@ Page Language="VB" %>
<script runat="server">
Sub Button1_Click(ByVal sender As Object,ByVal e As
System.EventArgs)
Label1.Text = "Server click handler called."
End Sub
</script>
<body>
<form id="form1" runat="server">
<asp:Button ID="Button1" Runat="server"
OnClick="Button1_Click"
OnClientClick="return
confirm('Ready to submit.')"
Text="Test Client Click" />
<br />
<asp:Label ID="Label1" Runat="server" text="" />
</form>
</body>
</html>
|
شناسائی و مراجعه به
كنترل های سرويس دهنده از طريق اسكريپت های سمت سرويس گيرنده
زمانی كه يك كنترل سرويس دهنده ASP.NET تفسير می گردد ،
خصلت ClientID آن در بردارنده خصلت های
Id و name عنصر توليد شده است
. ( خصلت ClientID به صورت اتوماتيك و همزمان با
مقداردهی به خصلت ID مقدار لازم را خواهد گرفت ) . فرض
كنيد با استفاده از نمونه كد زير ، يك كنترل سرويس دهنده
ASP.NET را ايجاد كرده باشيم :
<asp:textbox id="TextBox1" runat="server"
text="Sample Text" />
|
خصلت
ClientID ، مقدار TextBox1 را
خواهد گرفت و در
نهايت نتايج توليد شده زير برای يك مرورگر مبتنی بر HTML
ارسال می گردد :
<input name="TextBox1" type="text" value="Sample Text"
id="TextBox1" />
|
بنابراين
، به منظور دستيابی به يك كنترل سرويس دهنده ASP.NET از
طريق اسكريپت های سمت سرويس گيرنده ، می توان از خصلت های Id
و name استفاده نمود . برای آدرس دهی يك كنترل سرويس
دهنده ASP.NET توسط اسكريپت های سمت سرويس گيرنده ، می
توان از نام كامل آن نيز استفاده نمود ( fully qualified reference
). در صورتی كه كنترل سرويس دهنده فرزند عنصر form در
صفحه باشد ، می توان از گرامر زير به منظور مراجعه به كنترل در اسكريپت های سمت
سرويس گيرنده استفاده نمود .
<document.forms[0].TextBox1.value = "New value";
|
گرامر واقعی مورد نياز
برای مراجعه به يك كنترل سرويس دهنده به نوع كنترل و اين كه آيا كنترل فرزند كنترل
ديگری است ، بستگی خواهد داشت .
مراجعه به كنترل ها ئی
كه درون ساير كنترل ها قرار دارند
برخی كنترل ها
، كنترل های فرزند را درون صفحه تفسير می نمايند . كنترل های GridView,
DetailsView, FormView, DataList , Repeater , user controls و Web Parts نمونه
هائی در اين زمينه می باشند . در چنين مواردی ، كنترل فرزند ممكن است دارای يك
ID منحصربفرد نباشد چراكه كنترل های فرزند
در تمپليتی
تعريف شده اند كه برای هر سطر نمونه
، كنترل های جديدی توليد و يا
ممكن است كنترل parent از طريق يك منبع خارجی به صفحه
اضافه شده باشد ( نظير كنترل های Web part و
user ) . كنترل های parent به منزله naming containers میباشند
(توسط INamingContainer پياده سازی شده اند ). يك
naming containers منحصربفرد بودن
IDs كنترل های فرزند را تضمين می نمايد .
مثلا" می توان يك خصلت ItemTemplate را در كنترل
DataList ايجاد و يك كنترل Checkbox
را به آن اضافه
نمود كه مقدار ID آن
CheckEnabled در نظر گرفته شده باشد . در زمان تفسير
كنترل
DataList ، يك كنترل جديد
CheckEnabled برای هر آيتم داده
در نظر گرفته می شود . صفحه
تفسير شده نمی بايست شامل چندين نمونه از يك عنصر با نام
CheckEnabled باشد ، بنابراين كنترل DataList يك
شناسه منحصربفرد برایهر يك از كنترل های فرزند خود ايجاد
می نمايد .
شناسه های منحصربفرد برای كنترل های فرزند يك naming
container با بررسی دو خصلت توليد می گردند . برای هر كنترل فرزند :
هم
ClientID و هم UniqueID بر اساس خصلت
ID اوليه توليد می گردند تا اطلاعات لازم به
منظور تضمين منحصربفرد بودن نتايج در يك صفحه تامين گردد .از مقدار ClientID كه در
واقع ID عنصر تفسير شده است ، می توان در اسكريپت های
سمت سرويس گيرنده استفاده
نمود .
پس از اجرای يك صفحه حاوی يك naming container
و مشاهده Source آن ، می توان ID
توليد شده برای هر يك از كنترل های فرزند را مشاهده نمود .
در بخش سوم به بررسی ساير موارد خواهيم پرداخت .