حرکت بين فرم های وب
حرکت بين فرم های وب
بمنظور حرکت بين صفحات در يک برنامه وب ، ASP.NET ، پنج روش متفاوت را ارائه نموده است :
• کنترل hyperlink : با استفاده از کنترل فوق ، امکان حرکت از يک صفحه به صفحه ديگر ، فراهم می گردد.
• متد Response.Redirect : با استفاده از متد فوق، امکان حرکت از يک صفحه به صفحه ديگر ، فراهم می گردد . عملکرد متد فوق ، مشابه کليک نمودن بر روی يک hyperlink است .
• متد Server.Transfer : با استفاده از متد فوق ، اولا" به اجرای فرم جاری ( فرمی که از طريق آن، فرم ديگر فراخوانده شده است ) خاتمه داده شده و ثانيا" اجرای يک فرم وب جديد ،آغاز می گردد. متد فوق ، صرفا" در موارديکه قصد حرکت به يک فرم وب ديگر وجود داشته باشد ( فايلی با انشعاب aspx . ) ، استفاده می گردد .
• متد Server.Execute :با استفاده از متد فوق ، يک فرم وب ديگر اجراء و ماحصل آن در فرم وب صدازننده و در ناحيه ای مشخص شده ، نمايش داده می شود. بدين ترتيب، امکان ترکيب دو فرم وب با يکديگر فراهم می گردد .متد فوق ، صرفا" در موارديکه قصد حرکت به يک فرم وب ديگر وجود داشته باشد ( فايلی با انشعاب aspx . ) ، استفاده می گردد .
• متد اسکريپت Window.Open . با استفاده از روش فوق ، صفحه مورد نظر در يک پنجره جديد مرورگر و بر روی ماشين سرويس گيرنده ، نمايش داده می شود.
در ادامه به بررسی هر يک از روش های فوق، خواهيم پرداخت .
ساده ترين روش حرکت از يک فرم وب به فرم وب ديگر ، استفاده از يک ابرلينک است . در اين راستا می توان بر بر روی يک فرم وب ، از دستوری مشابه زير، استفاده نمود :
HyperLink |
<a href="WebForm2.aspx">WebForm2</a> |
زمانيکه کاربران برروی ابرلينک فوق ، کليک می نمايند، فرم وب webform2.aspx در مرورگر آنان نمايش داده می شود. از روش فوق می توان در هر محل و صفحات مبتنی بر HTML و ASP کلاسيک، استفاده نمود .با استفاده از ابرلينک ها ، امکان حرکت از يک صفحه به صفحه ای ديگر ، فراهم می گردد . تحقق عمليات فوق ، وابسته به واکنش کاربر و کليک نمودن بر روی ابر لينک می باشد . بديهی است در چنين مواردی امکان تصميم گيری پويا در رابطه با صفحه مقصد و زمان حرکت ، وجود نداشته و فرآيند حرکت از يک صفحه به صفحه ای ديگر با ماهيتی کاملا" استاتيک انجام خواهد شد .
در ASP.NET ، از رويکردی ديگر در اين زمينه ، استفاده می گردد.کنترل سرويس دهنده وب hyperlink ، يکی از روش های ارائه شده در ASP.NET بمنظور حرکت بين صفحات می باشد.مهمترين ويژگی کنترل سرويس دهنده فوق در مقايسه با يک ابرلينک معمولی ، قابليت برنامه نويسی آن از طريق سرويس دهنده می باشد.خصلت NavigateURL، مشخصات صفحه مقصد را نشان داده و می توان مقدار آن را از طريق کدهای نوشته شده و بصورت پويا تغيير داد .
HyperLink Server Control |
<form id="Form1" method="post" runat="server"> |
در صورتيکه مقصد يک hyperlink ،وابسته به شرايط و حالاتی خاص بر سرويس دهنده می باشد ، می توان مقدار NavigateUrl را بصورت پويا تغيير داد .
Change NavigateUrl Value |
Private Sub Button1_Click ( ByVal sender As System.Object,&_ |
پس از اجراء کد فوق ( کد فوق همزمان با کليک نمودن بر روی دکمه Button1 در فرم وب ، اجراء می گردد ) ، در صورتيکه کاربر بر روی لينک تعريف شده ( جدول قبل ) ، کليک نمايد ، در مقابل فعال شدن WebForm2.aspx ، فرم وب WebForm3.aspx اجراء خواهد شد.
کنترل سرويس دهنده hyperlink ، با توجه به مقدار خصلت NavigateURL ، به رويدادهای محقق شده با توجه به عمليات ( کليک ) کاربران ، پاسخ خواهد داد . اين نوع کنترل ها ، توانائی پاسخگوئی به رويدادهای ايجادشده در سمت سرويس دهنده را دارا نمی باشد.در صورتيکه قصد تفسير يک رويداد کليک را از طريق کد مورد نظر داشته باشيم ، می توان از کنترل LinkButton و يا کنترل سرويس دهنده ImageButton استفاده نمود . بمنظور حرکت از طريق يک LinkButton و يا ImageButton ، می توان از متد Response.Redirect استفاده نمود .
متد Redirect ، باعث می گردد که مرورگر به يک URL مشخص شده ، متصل و آن را فعال نمايد . پس از فراخوانی متد Redirect ، متد فوق پاسخ لازم بمنظور واکنش مناسب مرورگر را ايجاد می نمايد. در header پاسخ ايجاد شده توسط متد فوق ، کد وضعيت 302 ( Object Moved ) و آدرس URL مقصد مشخص می گردد . پس از دريافت پاسخ فوق توسط مرورگر ، از اطلاعات موجود در header بمنظور واکنش لازم ، استفاده می گردد . مرورگر از اطلاعات موجود در header پاسخ ارسالی ، بمنظور ايجاد يک درخواست HTTP ديگر و مرتبط با URL جديد استفاده می نمايد . در زمان استفاده از متد فوق ، لازم است به اين نکته دقت شود که عمليات Redirection در سمت سرويس گيرنده انجام خواهد شد و اين امر مستلزم دو Round trip ( ارسال درخواست از طرف سرويس گيرنده و پاسخ به درخواست توسط سرويس دهنده ) به سرويس دهنده خواهد بود . در اولين Round trip ، صفحه اوليه درخواست می گردد که در اين رابطه پاسخ 302 ارائه شده و در دومين Round trip ، درخواست مربوط به صفحه مقصد ارسال می گردد . کد زير نحوه استفاده از متد فوق در روتين مربوط به رويداد کليک مرتبط با دکمه LinkButton1 را نشان می دهد . پس از کليک نمودن بر روی دکمه فوق ، روتين مربوطه اجراء گرديده و از طريق آن صفحه ای با نام NewPage.aspx فعال خواهد شد .
Response.Redirect |
Private Sub LinkButton1_Click ( ByVal Sender As System.Object , &_ |
متد Transfer ، باعث انتقال فرآيند اجراء از فايل ASPX جاری به فايل ASPX ديگر می گردد( فايل های فوق ، می بايست بر روی يک سرويس دهنده وب باشند ). پس از فراخوانی متد فوق ، به اجرای صفحه جاری خاتمه داده شده و کنترل به يک صفحه ASPX ديگر ، منتقل می گردد .در زمانيکه از متد فوق بمنظور حرکت بين صفحات استفاده می گردد ، URL در مرورگر همچنان صفحه اوليه را نشان خواهد داد ، چراکه تغيير مسير بر روی سرويس دهنده محقق شده و مرورگر از اين انتقال آگاهی ، ندارد. عملکرد متد Transfer ، شباهت زيادی به اجرای يک hyperlink و يا استفاده از متد Redirect دارد . در اين رابطه صرفا" يک تفاوت اساسی وجود دارد: متد Transfer قادر به نگهداشت ( بخاطر سپردن ) اطلاعات صفحه مبداء در بين درخواست ها ، می باشد . با نسبت دهی مقدار True به آرگومان PreserveForm مربوط به متد Transfer ، امکان استفاده از اطلاعات QueryString , viewstate و روتين های مرتبط با هر يک از رويدادها در فرم وب مقصد ، فراهم می گردد. در اين رابطه می بايست در ابتدا به خصلت EnableViewStateMac در بخش دايرکتيو صفحه فرم وب ، مقدار False نسبت داده شود. ASP.NET ، بصورت پيش فرض، اطلاعات ViewState را hash می نمايد ، با تنظيم خصلت فوق به False ، اطلاعات hash نشده و ساير فرم های وب نيز قادر به دستيابی و استفاده از اطلاعات خواهند بود. کد زير ، نحوه غير فعال نمودن hashing را نشان می دهد . پس از غير فعال شدن hashing امکان استفاده از viewstate صفحه برای ساير صفحات ، فراهم می گردد.
Disable hashing |
<% Page language = "vb" EnableViewStateMac = "false" .... %> |
کد زير ( روتين پاسخگو در مقابل رويداد کليک بر روی دکمه imgTransfer ) ، نحوه ارسال اطلاعات بين فرم ها را با استفاده از متد Transfer نشان می دهد :
Information Passed between forms |
'webform1.aspx |
با استفاده از متد Form مربوط به شی Request می توان اطلاعات ViewState را از فرم وب مبداء ، بازيابی نمود . کد زير ، نحوه نمايش مقادير کنترل TextBox و مختصات X,Y را ازطريق رويداد کليک مربوط به دکمه ImageButton از Webform1.aspx در Webform2.aspx نشان می دهد .
Retrieve ViewState Information |
'Private Sub Page_Load ( ByVal Sender As System.Object , &_ |
با استفاده از متد فوق ، يک صفحه ASPX قادر به اجرای يک صفحه ASPX ديگر می گردد( فايل های فوق ، می بايست بر روی يک سرويس دهنده وب باشند ) . پس از فراخوانی و اجرای صفحه ، کنترل مجددا" به صفحه اوليه ( صفحه ای که از طريق آن متد Execute فعال شده است ) ، بر می گردد . روش فوق ، مشابه فراخوانی يک تابع در يک صفحه ASPX است . بدين ترتيب ، امکان اجرای يک فرم وب بدون خروج از فرم وب جاری ، فراهم شده و می توان نتايج حاصل از اجرای يک فرم وب را در يک ناحيه خاص فرم وب ديگر ( مبداء) نمايش داد . صفحه ASPX فراخوانده شده ،امکان دستيابی به form و مجموعه querystring صفحه اوليه را دارا خواهد بود( مشابه متد Transfer ). بنابراين لازم است ،خصلت EnabledViewStateMac ، دارای مقدار False باشد ( ممانعت از hashing اطلاعات ViewState ) . کد زير، يک فرم وب با نام Table.aspx را اجراء و آن را بعنوان يک کنترل Literal بر روی صفحه جاری ، نمايش خواهد داد .
Executes a WebForm and display result in current page |
'Private Sub butExecute_Click ( ByVal Sender As System.Object , &_ |
آرگومان دوم متد Execute ،اختياری است . در صورتيکه پارامتر فوق ، حذف گردد ، نتايج بر روی صفحه جاری نوشته می گردند. محتوی دو صفحه با هم نمايش داده شده و کنترل های سرويس دهنده موجود بر روی هر يک از صفحات ، قادر به پاسخگوئی به رويدادهای کاربر می باشد. در زمان استفاده از متد فوق و ترکيب فرم های وب بايکديگر ، لازم است به اين نکته دقت شود که هر گونه رويداد Postback که بر روی صفحه دوم محقق می گردد ، باعث از بين رفتن اطلاعات مربوط به فرم وب اوليه ( فرمی که از طريق آن متد Execute فراخوانده شده است ) می گردد.بنا براين ، ترکيب فرم ها با يکديگر زمانی مفيد خواهد بود که فرم وب دوم از کنترل هائی که باعث تحقق يک رويداد PostBack می گردند ، استفاده نکرده باشد .
بمنظورفعال نمودن يک نمونه از برنامه مرورگر ،می توان از متد Open مربوط به شی Window سمت سرويس گيرنده، استفاده نمود. عمليات فوق را می توان صرفا" از طريق يک اسکريپت سرويس گيرنده ، انجام داد ( پنجره جديد بر روی سرويس گيرنده ايجاد می گردد). در اين رابطه ، امکاناتی نيز وجود دارد که می توان از آنان بمنظور کنترل محتوی و شکل ظاهری يک پنجره جديد مرورگر از طريق سرويس دهنده ، استفاده بعمل آورد. در ساده ترين شکل ، متد Window.Open ، بصورت زير بخدمت گرفته می شود :
Windows.Open method |
< Input onClick="Window.Open('webform2.aspx') " type = "submit" value="New Window " > |
برای استفاده از يک متغير بعنوان URL مقصد ، می بايست webform2.aspx با يک تگ داده ، جايگزين گردد .
Target URL as variable |
< Input onClick="Window.Open('<%# urlTarget %>') " type = "submit" value="New Window "> |
بمنظور بهنگام سازی ، URL مقصد از طريق کد سرويس دهنده ، می توان از يک متغير Public و نسبت دهی داده ، استفاده نمود . کد زير ، مقدارURL مقصد را مشخص و آن را از طريق نسبت دهی داده در زمان لود صفحه ، بهنگام می نمايد.
Update Target URL |
Public urlTarget As String |
با توجه به اينکه متد Window.Open ، دارای آرگومان های متعدد بمنظور کنترل ويژگی های متفاوت پنجره جديد مرورگر می باشد، می توان کلاسی خاص را در اين زمينه ايجاد تا پاسخگوی تمامی تنظيمات متفاوت باشد .
• از Hyperlink در مواردی استفاده می گردد که قصد داشته باشيم زمان و مقصد حرکت را بصورت کامل به کاربر ، واگذار نمائيم . بدين ترتيب ، کاربران با توجه به خواسته خود و در زمان مورد نظر ، می توانند بر روی هر يک از ابرلينک های تعبيه شده بر روی يک صفحه ، کليک نمايند .
• بمنظور کنترل مقصد کاربران و تعيين زمان لازم برای حرکت به صفحه ای ديگر ، می توان از يک کنترل سرويس دهنده HyperLink استفاده نمود . در اين رابطه ، خصلت NavigateURL می تواند بصورت پويا مقداردهی گردد .
• از متد Redirect در موارديکه قصد فعال نمودن منابع مستقر در محدوده سرويس دهنده وب ديگری وجود داشته باشد ، استفاده می گردد( صفحه مقصد بر روی سرويس دهنده وب ديگر می باشد ) .
• از متد Redirect ، می توان بمنظور فعال نمودن منابع ديگر نظير HTML استفاده نمود .
• از متد Redirect در موارديکه لازم است يک querystring بصورت صريح همراه با URL مشخص گردد ، استفاده می شود .
• در موارديکه قصد انتقال کنترل به يک صفحه ASPX موجود بر روی سرويس دهنده وب يکسان ، وجود داشته باشد ،می بايست از متد Transfer در مقابل Redirect استفاده نمود.متد Transfer از round trip غيرضروری جلوگيری و دارای کارائی بهتری است.
• در موارديکه ، قصد استفاده از خروجی يک صفحه ASPX و نمايش آن در ناحيه ای خاص بر روی صفحه ديگر ، وجود داشته باشد ، می توان از متد Execute استفاده نمود .
{{Fullname}} {{Creationdate}}
{{Body}}