Cross Page Posting در ASP.NET 2.0
ASP.NET 2.0 ، مجموعه ای از امكانات و پتانسيل های جديد را در اختيار برنامه نويسان وب قرار می دهد . Cross Page Posting يك نمونه در اين زمينه می باشد كه در ادامه به بررسی آن خواهيم پرداخت .
سناريوی ارسال اطلاعات در صفحات ASP.NET
فرم ها به همراه كنترل های سرويس دهنده موجود بر روی آنان دارای نقشی اساسی در پياده سازی برنامه های وب خصوصا" بخش رابط كاربر می باشند . پس از فعال كردن كنترل های button ، به صورت پيش فرض اطلاعات برای همان صفحه ای كه شامل كنترل button است، ارسال ( post ) تا متناسب با رويداد ايجاد شده ،‌روتين مربوطه فعال و عمليات لازم را انجام دهد ( جلوه ای از برنامه نويسی مبتنی بر رويداد در برنامه های وب ASP.NET ) . در اكثر موارد سناريوی فوق منطبق با خواسته پياده كنندگان نرم افزار می باشد ولی در برخی موارد ممكن است لازم باشد كه اطلاعات برای صفحه ای ديگر در برنامه ارسال گردد . در چنين مواردی می توان از متد Server.Transfer به منظور حركت بين صفحات استفاده نمود ولی URL تغيير پيدا نخواهد كرد .
با استفاده از امكانات ارائه شده در ASP.NET 2.0 می توان اطلاعات موجود در يك صفحه را برای صفحه ديگر ارسال تا زمينه استفاده از آنان برای صفحه دوم فراهم گردد . با استفاده از ويژگی Cross Page Posting در ASP.NET 2.0 می توان يك postback طبيعی را به يك صفحه متفاوت در برنامه انجام داد . در ادامه ، صفحه مقصد قادر به دستيابی مقادير كنترل های سرويس دهنده موجود در صفحه مبداء خواهد بود .

نحوه استفاده از Cross Page Posting
برای استفاده از Cross Page Posting ، می توان از خصلت PostBackUrl مربوط به كنترل button استفاده و صفحه مقصد را مشخص نمود . در صفحه مقصد ، با استفاده از خصلت PreviousPage ، می توان مقادير مورد نظر از صفحه مبداء را بازيابی نمود . به صورت پيش فرض ، خصلت PreviousPage از نوع Page می باشد ،‌ بنابراين لازم است برای دستيابی به كنترل ها از متد FindControl استفاده گردد .


نحوه عملكرد Cross Page Posting
فرآيندCross Page Posting بر اساس روال زير انجام می شود :


  • action فرم در صفحه اول ، متناسب با شرايط تعريف شده مقداردهی می گردد .
  • پس از فعال شدن button مربوطه ، ارسال اطلاعات از صفحه اول به صفحه دوم انجام می شود .
  • صفحه شماره دوم از viewstate صفحه اول استفاده می نمايد .
  • در زمان دستيابی PreviousPage ، مقدار Viewstate به عنوان يك نمونه از صفحه شماره يك مجددا" مورد توجه قرار می گيرد .
  • صفحه شماره يك عمليات خود را تا انتهای فاز LoadComplete انجام خواهد داد .
  • در اين مقطع ،‌ امكان استفاده از مقادير كنترل ها در صفحه اول برای صفحه دوم فراهم می گردد .

با توجه به اين كه صفحه شماره يك عمليات خود را در پاسخ به يك cross-page post تا فاز LoadComplete انجام خواهد داد ، لازم است در برخی موارد بررسی لازم در خصوص اين كه درخواست ارسالی از نوع cross-page post نمی باشد را انجام داد . بدين منظور می توان از IsCrossPagePostBack در صفحه شماره يك استفاده نمود :
If Not Page.IsCrossPagePostBack Then
' پردازش يك درخواست معمولی
End If
مثال : نحوه استفاده از Cross Page Posting
در اين مثال از يك فرم به همراه دو button استفاده شده است . پس از انتخاب يكی از آيتم های كنترل DropDownList ، در صورتی كه دكمه " ارسال به همين صفحه " فعال گردد ، اطلاعات برای صفحه Mypage1.aspx ارسال و در خروجی و به كمك يك كنترل label نمايش داده می شود .
در صورتی كه دكمه " ارسال به صفحه ديگر" فعال گردد ، اطلاعات برای صفحه ShowInSecondpage.aspx ارسال می گردند . بدين منظور به همراه Button2 از خصلت PostBackUrl استفاده شده است كه مقدار آن ShowInSecondPage.aspx در نظر گرفته شده است .
شكل زير اجرای Mypage1.aspx را نشان می دهد :

Mypage1.aspx
<SCRIPT runat="server">
Sub ShowSelection (Src As Object, Args As EventArgs)
Output.Text ="با تشكر ، "
Output.Text &= "نظر شما توسعه " & MyDropDownList.SelectedItem.Text
Output.Text &= " است "
End Sub
</SCRIPT>
<Html dir =rtl>
<Font Face="Tahoma" Size="2">
كدام بخش سايت srco نياز به توسعه دارد ؟

<form runat="server">
<asp:DropDownList id="MyDropDownList" runat="server"
style="font-family: Tahoma; font-size: 9pt">
<asp:ListItem Value="1" Text="بخش مقالات"/>
<asp:ListItem Value="2" Text="بخش نكته ها "/>
<asp:ListItem Value="3" Text="بخش خودآزمون ها"/>
<asp:ListItem Value="4" Text="بخش خودآموزها"/>
<asp:ListItem Value="5" Text="بخش دايره المعارف"/>
</asp:DropDownList>

<asp:Button Text="ارسال به همين صفحه" ID="Button1"
OnClick="ShowSelection" runat="server"
style="font-family: Tahoma; font-size: 8pt"/>
<asp:Button Text="ارسال به صفحه ديگر" ID="Button2"
PostBackUrl="ShowInSecondPage.aspx" runat="server"
style="font-family: Tahoma; font-size: 8pt" />

<asp:Label id="Output" runat="server"/>
</form>
</html>
كد صفحه ShowInSecondPage.aspx در جدول زير نشان داده شده است :
ShowInSecondPage.aspx
<SCRIPT runat="server">
Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim SelectionItem As DropDownList
SelectionItem = Page.PreviousPage.FindControl("MyDropDownList")
Output2.Text ="با تشكر ، "
Output2.Text &= "نظر شما توسعه " & SelectionItem.SelectedItem.Text
Output2.Text &= " است "
End Sub
</SCRIPT>
<Html dir =rtl>
<Font Face="Tahoma" Size="2">
<form runat="server">
<asp:Label id="Output2" runat="server"/>
</form>
</body>
در صورتی كه دكمه " ارسال به صفحه ديگر" فعال گردد ،‌ آيتم انتخابی برای صفحه ShowInSecondPage.aspx ارسال و با توجه به سياست های موجود نمايش داده می شود .