اسکریپت های سمت سرویس گیرنده در صفحات ASP.NET ( بخش دوم ) - برترین مقالات کامپیوتر
X
تبلیغات
پیکوفایل
رایتل


برترین مقالات کامپیوتر

برترین مقالات کامپیوتر

دربخش اول به ضرورت استفاده از اسکریپت های سمت سرویس گیرنده در برنامه های وب اشاره و با نحوه استفاده از اسکریپت های سمت سرویس گیرنده توسط برخی از کنترل های سرویس دهنده 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 با بررسی دو خصلت تولید می گردند . برای هر کنترل فرزند :

  • خصلت UniqueID کنترل به عنوان خصلت name در نظر گرفته می شود .

  • خصلت ClientID کنترل به عنوان خصلت Id  در نظر گرفته می شود .

هم ClientID و هم UniqueID بر اساس خصلت ID  اولیه تولید می گردند تا  اطلاعات لازم به منظور تضمین منحصربفرد بودن نتایج در یک صفحه تامین گردد .از مقدار ClientID که در واقع ID عنصر تفسیر شده است ، می توان  در اسکریپت های سمت سرویس گیرنده استفاده نمود . پس از اجرای یک صفحه حاوی یک  naming container  و مشاهده Source آن ، می توان ID تولید شده برای هر یک از کنترل های فرزند را مشاهده نمود .
در بخش سوم به بررسی سایر موارد خواهیم پرداخت .

نوشته شده در دوشنبه 2 مرداد‌ماه سال 1385ساعت 07:49 توسط ADMIN نظرات (0)|


Design By : Night Skin