PDA

View Full Version : حرکت بين فرم های وب



aryaei2000
پنج شنبه 07 شهریور 1387, 00:23 صبح
اطلاعات لينک شده به يکديگر، يکی از خصايص ذاتی و مهم وب محسوب می گردد. فرم های وب دارای نقشی حياتی در ايجاد برنامه وب دات نت می باشند. با استفاده از ابرلينک ها و روش های حرکت بين صفحات ، امکان ارتباط ( لينک ) بين فرم های وب متعدد موجود در يک برنامه وب ، فراهم می گردد. ASP.NET ( پلات فرم دات نت برای طراحی و پياده سازی برنامه وب) ، روش های متفاوتی را بمنظور حرکت بين صفحات در يک برنامه ،ارائه نموده که هر يک دارای تاثيرات خاص خود در ارتباط با نحوه نمايش و مبادله داده بين صفحات، می باشند . در اين مقاله قصد داريم به بررسی هر يک از روش های فوق پرداخته و با جايگاه واقعی استفاده از آنان ، بيشتر آشنا شويم .
روش های حرکت بين صفحات

بمنظور حرکت بين صفحات در يک برنامه وب ، ASP.NET ، پنج روش متفاوت را ارائه نموده است : کنترل hyperlink : با استفاده از کنترل فوق ، امکان حرکت از يک صفحه به صفحه ديگر ، فراهم می گردد. <LI dir=rtl>متد Response.Redirect : با استفاده از متد فوق، امکان حرکت از يک صفحه به صفحه ديگر ، فراهم می گردد . عملکرد متد فوق ، مشابه کليک نمودن بر روی يک hyperlink است .

متد Server.Transfer : با استفاده از متد فوق ، اولا" به اجرای فرم جاری ( فرمی که از طريق آن، فرم ديگر فراخوانده شده است ) خاتمه داده شده و ثانيا" اجرای يک فرم وب جديد ،آغاز می گردد. متد فوق ، صرفا" در موارديکه قصد حرکت به يک فرم وب ديگر وجود داشته باشد ( فايلی با انشعاب aspx . ) ، استفاده می گردد .

متد Server.Execute :با استفاده از متد فوق ، يک فرم وب ديگر اجراء و ماحصل آن در فرم وب صدازننده و در ناحيه ای مشخص شده ، نمايش داده می شود. بدين ترتيب، امکان ترکيب دو فرم وب با يکديگر فراهم می گردد .متد فوق ، صرفا" در موارديکه قصد حرکت به يک فرم وب ديگر وجود داشته باشد ( فايلی با انشعاب aspx . ) ، استفاده می گردد . متد اسکريپت Window.Open . با استفاده از روش فوق ، صفحه مورد نظر در يک پنجره جديد مرورگر و بر روی ماشين سرويس گيرنده ، نمايش داده می شود.

aryaei2000
پنج شنبه 07 شهریور 1387, 00:24 صبح
کنترل سرويس دهنده Hyperlink
ساده ترين روش حرکت از يک فرم وب به فرم وب ديگر ، استفاده از يک ابرلينک است . در اين راستا می توان بر بر روی يک فرم وب ، از دستوری مشابه زير، استفاده نمود :



<a href="WebForm2.aspx">WebForm2</a>

aryaei2000
پنج شنبه 07 شهریور 1387, 00:25 صبح
زمانيکه کاربران برروی ابرلينک فوق ، کليک می نمايند، فرم وب webform2.aspx در مرورگر آنان نمايش داده می شود. از روش فوق می توان در هر محل و صفحات مبتنی بر HTML و ASP کلاسيک، استفاده نمود .با استفاده از ابرلينک ها ، امکان حرکت از يک صفحه به صفحه ای ديگر ، فراهم می گردد . تحقق عمليات فوق ، وابسته به واکنش کاربر و کليک نمودن بر روی ابر لينک می باشد . بديهی است در چنين مواردی امکان تصميم گيری پويا در رابطه با صفحه مقصد و زمان حرکت ، وجود نداشته و فرآيند حرکت از يک صفحه به صفحه ای ديگر با ماهيتی کاملا" استاتيک انجام خواهد شد .

aryaei2000
پنج شنبه 07 شهریور 1387, 00:26 صبح
در ASP.NET ، از رويکردی ديگر در اين زمينه ، استفاده می گردد.کنترل سرويس دهنده وب hyperlink ، يکی از روش های ارائه شده در ASP.NET بمنظور حرکت بين صفحات می باشد.مهمترين ويژگی کنترل سرويس دهنده فوق در مقايسه با يک ابرلينک معمولی ، قابليت برنامه نويسی آن از طريق سرويس دهنده می باشد.خصلت NavigateURL، مشخصات صفحه مقصد را نشان داده و می توان مقدار آن را از طريق کدهای نوشته شده و بصورت پويا تغيير داد .



<form id="Form1" method="post" runat="server">
<asp:HyperLink id="HyperLink1" runat="server"
NavigateUrl="WebForm2.aspx">WebForm2</asp:HyperLink>
</form>

aryaei2000
پنج شنبه 07 شهریور 1387, 00:27 صبح
در صورتيکه مقصد يک hyperlink ،وابسته به شرايط و حالاتی خاص بر سرويس دهنده می باشد ، می توان مقدار NavigateUrl را بصورت پويا تغيير داد .



Private Sub Button1_Click ( ByVal sender As System.Object,&_
ByVal e As System.EventArgs) Handles Button1.Click
HyperLink1.NavigateUrl = "WebForm3.aspx"
End Sub

aryaei2000
پنج شنبه 07 شهریور 1387, 00:28 صبح
پس از اجراء کد فوق ( کد فوق همزمان با کليک نمودن بر روی دکمه Button1 در فرم وب ، اجراء می گردد ) ، در صورتيکه کاربر بر روی لينک تعريف شده ( جدول قبل ) ، کليک نمايد ، در مقابل فعال شدن WebForm2.aspx ، فرم وب WebForm3.aspx اجراء خواهد شد.
کنترل سرويس دهنده hyperlink ، با توجه به مقدار خصلت NavigateURL ، به رويدادهای محقق شده با توجه به عمليات ( کليک ) کاربران ، پاسخ خواهد داد . اين نوع کنترل ها ، توانائی پاسخگوئی به رويدادهای ايجادشده در سمت سرويس دهنده را دارا نمی باشد.در صورتيکه قصد تفسير يک رويداد کليک را از طريق کد مورد نظر داشته باشيم ، می توان از کنترل LinkButton و يا کنترل سرويس دهنده ImageButton استفاده نمود . بمنظور حرکت از طريق يک LinkButton و يا ImageButton ، می توان از متد Response.Redirect استفاده نمود

aryaei2000
پنج شنبه 07 شهریور 1387, 00:28 صبح
متد Redirect
متد Redirect ، باعث می گردد که مرورگر به يک URL مشخص شده ، متصل و آن را فعال نمايد . پس از فراخوانی متد Redirect ، متد فوق پاسخ لازم بمنظور واکنش مناسب مرورگر را ايجاد می نمايد. در header پاسخ ايجاد شده توسط متد فوق ، کد وضعيت 302 ( Object Moved ) و آدرس URL مقصد مشخص می گردد . پس از دريافت پاسخ فوق توسط مرورگر ، از اطلاعات موجود در header بمنظور واکنش لازم ، استفاده می گردد . مرورگر از اطلاعات موجود در header پاسخ ارسالی ، بمنظور ايجاد يک درخواست HTTP ديگر و مرتبط با URL جديد استفاده می نمايد . در زمان استفاده از متد فوق ، لازم است به اين نکته دقت شود که عمليات Redirection در سمت سرويس گيرنده انجام خواهد شد و اين امر مستلزم دو Round trip ( ارسال درخواست از طرف سرويس گيرنده و پاسخ به درخواست توسط سرويس دهنده ) به سرويس دهنده خواهد بود . در اولين Round trip ، صفحه اوليه درخواست می گردد که در اين رابطه پاسخ 302 ارائه شده و در دومين Round trip ، درخواست مربوط به صفحه مقصد ارسال می گردد . کد زير نحوه استفاده از متد فوق در روتين مربوط به رويداد کليک مرتبط با دکمه LinkButton1 را نشان می دهد . پس از کليک نمودن بر روی دکمه فوق ، روتين مربوطه اجراء گرديده و از طريق آن صفحه ای با نام NewPage.aspx فعال خواهد شد .

aryaei2000
پنج شنبه 07 شهریور 1387, 00:29 صبح
متد Transfer
متد 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 صفحه برای ساير صفحات ، فراهم می گردد.


<% Page language = "vb" EnableViewStateMac = "false" .... %>

aryaei2000
پنج شنبه 07 شهریور 1387, 00:30 صبح
کد زير ( روتين پاسخگو در مقابل رويداد کليک بر روی دکمه imgTransfer ) ، نحوه ارسال اطلاعات بين فرم ها را با استفاده از متد Transfer نشان می دهد :


webform1.aspx
Private Sub imgTransfer_Click(ByVal Sender As System.Object , &_
ByVal e As System.Web.UI.ImageClickEventArgs ) Handles imgtransfer .Click
Server.Transfer("Webform2.aspx" , True)
End Sub

aryaei2000
پنج شنبه 07 شهریور 1387, 00:31 صبح
با استفاده از متد Form مربوط به شی Request می توان اطلاعات ViewState را از فرم وب مبداء ، بازيابی نمود . کد زير ، نحوه نمايش مقادير کنترل TextBox و مختصات X,Y را ازطريق رويداد کليک مربوط به دکمه ImageButton از Webform1.aspx در Webform2.aspx نشان می دهد .



'Private Sub Page_Load ( ByVal Sender As System.Object , &_
ByVal e As System.EventArgs ) Handles Mybase.Load
Dim colForm As System.Collection.Specilized.NameValueCollection
colForm = Request.Form
Response.Write ( "TextBox1.Text : " colForm.Item("TextBox1") & "<BR>")
Response.Write ( "ImageButton X , Y coords : " colForm.Item("imgTransfer.x") &_
"," colForm.Item("imgTransfer.y") & "<br>" )
End Sub

aryaei2000
پنج شنبه 07 شهریور 1387, 00:32 صبح
متد Execute
با استفاده از متد فوق ، يک صفحه ASPX قادر به اجرای يک صفحه ASPX ديگر می گردد( فايل های فوق ، می بايست بر روی يک سرويس دهنده وب باشند ) . پس از فراخوانی و اجرای صفحه ، کنترل مجددا" به صفحه اوليه ( صفحه ای که از طريق آن متد Execute فعال شده است ) ، بر می گردد . روش فوق ، مشابه فراخوانی يک تابع در يک صفحه ASPX است . بدين ترتيب ، امکان اجرای يک فرم وب بدون خروج از فرم وب جاری ، فراهم شده و می توان نتايج حاصل از اجرای يک فرم وب را در يک ناحيه خاص فرم وب ديگر ( مبداء) نمايش داد . صفحه ASPX فراخوانده شده ،امکان دستيابی به form و مجموعه querystring صفحه اوليه را دارا خواهد بود( مشابه متد Transfer ). بنابراين لازم است ،خصلت EnabledViewStateMac ، دارای مقدار False باشد ( ممانعت از hashing اطلاعات ViewState ) . کد زير، يک فرم وب با نام Table.aspx را اجراء و آن را بعنوان يک کنترل Literal بر روی صفحه جاری ، نمايش خواهد داد .


Private Sub butExecute_Click ( ByVal Sender As System.Object , &_
ByVal e As System.EventArgs ) Handles butExecute.Click
Dim swrTarget As New System.IO.StringWriter( )
Server.Execute ( "Table.aspx" ,swrTarget )
litTable.Text = "<h2> Table Results </h2> " & swrTarget.ToString )
End Sub

aryaei2000
پنج شنبه 07 شهریور 1387, 00:33 صبح
آرگومان دوم متد Execute ،اختياری است . در صورتيکه پارامتر فوق ، حذف گردد ، نتايج بر روی صفحه جاری نوشته می گردند. محتوی دو صفحه با هم نمايش داده شده و کنترل های سرويس دهنده موجود بر روی هر يک از صفحات ، قادر به پاسخگوئی به رويدادهای کاربر می باشد. در زمان استفاده از متد فوق و ترکيب فرم های وب بايکديگر ، لازم است به اين نکته دقت شود که هر گونه رويداد Postback که بر روی صفحه دوم محقق می گردد ، باعث از بين رفتن اطلاعات مربوط به فرم وب اوليه ( فرمی که از طريق آن متد Execute فراخوانده شده است ) می گردد.بنا براين ، ترکيب فرم ها با يکديگر زمانی مفيد خواهد بود که فرم وب دوم از کنترل هائی که باعث تحقق يک رويداد PostBack می گردند ، استفاده نکرده باشد .

aryaei2000
پنج شنبه 07 شهریور 1387, 00:33 صبح
نمايش يک صفحه در يک پنجره جديد مرورگر
بمنظورفعال نمودن يک نمونه از برنامه مرورگر ،می توان از متد Open مربوط به شی Window سمت سرويس گيرنده، استفاده نمود. عمليات فوق را می توان صرفا" از طريق يک اسکريپت سرويس گيرنده ، انجام داد ( پنجره جديد بر روی سرويس گيرنده ايجاد می گردد). در اين رابطه ، امکاناتی نيز وجود دارد که می توان از آنان بمنظور کنترل محتوی و شکل ظاهری يک پنجره جديد مرورگر از طريق سرويس دهنده ، استفاده بعمل آورد. در ساده ترين شکل ، متد Window.Open ، بصورت زير بخدمت گرفته می شود :



< Input onClick="Window.Open('webform2.aspx') " type = "submit" value="New Window " >

aryaei2000
پنج شنبه 07 شهریور 1387, 00:35 صبح
برای استفاده از يک متغير بعنوان URL مقصد ، می بايست webform2.aspx با يک تگ داده ، جايگزين گردد .



< Input onClick="Window.Open('<%# urlTarget %>') " type = "submit" value="New Window ">

aryaei2000
پنج شنبه 07 شهریور 1387, 00:35 صبح
بمنظور بهنگام سازی ، URL مقصد از طريق کد سرويس دهنده ، می توان از يک متغير Public و نسبت دهی داده ، استفاده نمود . کد زير ، مقدارURL مقصد را مشخص و آن را از طريق نسبت دهی داده در زمان لود صفحه ، بهنگام می نمايد.



Public urlTarget As String
Private Sub Page_Load ( ByVal Sender As System.Object , &_
ByVal e As System.EventArgs ) Handles Mybase.Load
urlTarget = "webform2.aspx"
page.DataBind ( )
End Sub

aryaei2000
پنج شنبه 07 شهریور 1387, 00:37 صبح
خلاصه از Hyperlink در مواردی استفاده می گردد که قصد داشته باشيم زمان و مقصد حرکت را بصورت کامل به کاربر ، واگذار نمائيم . بدين ترتيب ، کاربران با توجه به خواسته خود و در زمان مورد نظر ، می توانند بر روی هر يک از ابرلينک های تعبيه شده بر روی يک صفحه ، کليک نمايند . بمنظور کنترل مقصد کاربران و تعيين زمان لازم برای حرکت به صفحه ای ديگر ، می توان از يک کنترل سرويس دهنده HyperLink استفاده نمود . در اين رابطه ، خصلت NavigateURL می تواند بصورت پويا مقداردهی گردد .از متد Redirect در موارديکه قصد فعال نمودن منابع مستقر در محدوده سرويس دهنده وب ديگری وجود داشته باشد ، استفاده می گردد( صفحه مقصد بر روی سرويس دهنده وب ديگر می باشد ) .از متد Redirect ، می توان بمنظور فعال نمودن منابع ديگر نظير HTML استفاده نمود . از متد Redirect در موارديکه لازم است يک querystring بصورت صريح همراه با URL مشخص گردد ، استفاده می شود . در موارديکه قصد انتقال کنترل به يک صفحه ASPX موجود بر روی سرويس دهنده وب يکسان ، وجود داشته باشد ،می بايست از متد Transfer در مقابل Redirect استفاده نمود.متد Transfer از round trip غيرضروری جلوگيری و دارای کارائی بهتری است.در موارديکه ، قصد استفاده از خروجی يک صفحه ASPX و نمايش آن در ناحيه ای خاص بر روی صفحه ديگر ، وجود داشته باشد ، می توان از متد Execute استفاده نمود .