فصل دهم

مروری بر روی وب فرمها در ASP.NET

انواع جابجایی بین صفحات وب فرمها

 postback، باز دید مستقیم (direct navigation با کمک تگ <a>)  

باز دید بر اساس کد ( با استفاده ازServer.Transfer  و Response.Redirect )


به محض آغاز نمودن برنامه نویسی وب نیاز خواهید داشت که بتوانید کاربر را از یک صفحه به صفحه ی دیگر بفرستید . این کار درست شبیه همان چیزی است که در برنامه های ویندوز از یک فرم به فرم دیگر جابجا می شدید و مقادیر را بین فرمهای مختلف رد و بدل می کرده اید .در دنیای ASP.NET جابجایی بین فرمهای مختلف فرآیند جهت دهی کاربر از یک صفحه وب فرم به صفحه دیگر بوده و یا با درخواست باز سازی همین صفحه صورت می گیرد ما در اینجا یک داستان (مطابق BDSWebExample  ) را طرح می کنیم : وقتیکه کاربر بخواهد نمونه کارهای خود را به لیست های موجود اضافه کند ابتدا باید شناسایی شود برای این منظور زمانیکه کاربر کلید Add Example را فشار می دهد اگر قبلاً شناسایی نشده باشد باید به صفحه تعیین دسترسی و شناسایی هدایت شود که همان صفحه Login.aspx می باشد.  پس از آنکه وی شناسایی شد به صفحه مدیریت Manage.aspx هدایت می شود.

در این فصل شما راجع به نکات زیر مطالبی را یاد خواهید گرفت :

?     جابجایی با استفاده از hyperlinks ( یا  تگ < a > )

?     کنترل هوشمند تک < a > یا HTML Anchor

?     پاسخ به رویداد Postback

?     استفاده از Response.Redirect

?     استفاده از Server.Transfer


Hyperlinks:

ساده ترین کار استفاده از تگ HTML روی صفحه است. اضافه کردن یک تگ < a > کار تنها ASP.NET نبوده و در قلب و روح تمام صفحات وب جای دارد. با استفاده از ابر پیوند ها، صفحه هدف در صفت " href " کد نویسی می شود نمونه آن را مشاهده می کنید:

Login HERE

کنترل  HtmlAnchor:

با توجه به اینکه اکنون کنترل های HTML را می شناسید و اهمیت آنها را در ASP.NET می دانید، میتوانید برای استفاده از متد HtmlAnchor صفحه مورد نظر خود را از طریق خصوصیت href تعریف کرده و ارتباط لازم را پدید آورید. استفاده از خاصیت فعال سمت سرور تگ < a > امکان تغییر مسیر صفحه هدف را تا قبل از تفسیر کد توسط مرورگر پدید خواهد آورد. در اینجا یک نمونه عملی را به شما نشان خواهیم داد ( فرض کرده ایم که می توانید تگ های معمولی را به کنترل HTML تبدیل کنید):

TWebForm1 = class(System.Web.UI.Page)

...

strict protected

  smartLink : System.Web.UI.HtmlControls.HtmlAnchor;

...

 

procedure TWebForm1.Page_Load(

  sender: System.Object;

  e: System.EventArgs);

begin

  //set the target page of the hyperlink

  smartLink.Href := 'Login.aspx';

  smartLink.InnerText := 'Login HERE!';

end; 

بعد از اینکه شما کنترل HtmlAnchor را روی صفحه قرار داده و ID سمت سرور را به آن اضافه نمو ده اید چنین خواهد بود:

<a id=smartLink

    href=" " runat="server">Anchora>

و کدی که توسط مرورگر خوانده می شود نیز به این شکل خواهد بود:

Login HERE!

با بکاربردن ابر پیوندها برای جهت دهی کاربر  به سوی یک صفحه دیگر شما از مسیر دهی مستقیم استفاده کرده اید. مسیر دهی مستقیم از اجزاء HTML و DHTML و تکنیکهای آن استفاده می کند.

روش جالب دیگر بعدی برای مسیر دهی کاربر استفاده از کدهای جاوا و DHTML در سمت کاربر است . برای مثال  window.showModalDialog سبب ایجاد یک پنجره MODAL شده که مستند HTML خاصی را نمایش می دهد. در کل فرا خوانی تابع سمت کاربر که سبب اجرا ی window.showModalDialog می شود باید به رویداد یک کنترل یا ابر پیوند ضمیمه شده باشد.

نکته:

دیالوگ های MONOSOFT از این رو ش برای تولید خروجی یا توابع ورود اطلاعات و ورود درخواست استفاده می کنند. ما قرار نیست که هیچ نمونه ای از کدنویسی سمت کاربر را ارائه کنیم زیرا این کار نیازمند دانستن جاوا و مدل  DOM ،DHTML  و غیره می باشد.

POST BACK  :

به نوعی می توان گفت که انجام پست بک ها کاریست که ASP.NET به خوبی از عهده آن بر می آید. ما در بخشهای قبلی راجع به پست بک صحبت کرده ایم. پست بک نیز در واقع نوعی مسیر دهی مستقیم است با این تفاوت که صفحه هدف در واقع همان صفحه ای است که هم اکنون مشاهده شده است. در  ASP.NET یک دلیل انجام عمل پست بک کلیک بر روی دکمه می باشد. دلیل دیگر برای عمل پست بک تغییر محتوای یک کادر ورود متن بوده به شرط آنکه خاصیت AutoPostBack آن True شده باشد. اجرای پست بکها درASP.NET بسیار مهم است و به شما اجازه می دهد که رویدادهای مختلف را بتوانید روی سرور دریافت و پاسخ مناسب بدهید. نمونه ای از این نوع کار را در فصل قبل دیده ایم.

 در اینجا ما از نزدیک به دو روش پردازش با کد دیگر نگاهی خواهیم داشت . روش پردازش با کد به معنی آنست که کار مسیر دهی توسط کد نوشته شده در سمت سرور انجام خواهد شد . توجه داشته باشید که کد نویسی HtmlAnchor ساده ترین روش کد نویسی برای مسیر دهی می باشد.


Response.Redirect

یکی از راههای متعارف (در ASP کلاسیک ) برای مسیر دهی به صفحه دیگر توسط کد نویسی در سمت سرور استفاده از خاصیت Respone ( پاسخ ) وب فرم می باشد .خاصیت Response شی HttpResponse که به صفحه ملحق شده است، بهره می برد . این شی به شما امکان می دهد که در پاسخ به درخواستHTTP  اطلاعات مورد نیاز را به کاربر ارسال کنید. متد Redirect از کلاس HttpResponse سبب می شود که کاربر به یک URL جدید اعزام شود. در اینجا به مثال توجه کنید

procedure TWebForm1.Page_Load(

   sender: System.Object;

   e: System.EventArgs);

begin

  Response.Redirect('WebForm2.aspx');

end;

مشکل استفاده از Response.Redirect آنست که لازمه اجرای آن یک دور گردش کامل به سوی کاربر برای اجرای درخواست می باشد. در درخواست اولیه ، صفحه حاوی مسیر دهی پردازش می شود. و در درخواست بعدی صفحه مسیر دهی شده به دست کاربر می رسد. به عبارت دیگر اگر شما از Response.Redirect برای هدایت کاربر به یک سایت کاملاً جدید (مثلاً به سایت کسی که روی سایت شما تبلیغات نموده است ) استفاده می کنید شما باید دو بار این مسیر را طی کنید. اول شما کنتور شمارش گر تعداد بازدیدها را اضافه می کنید و سپس در درخواست دوم کاربر را به مسیر صحیح که همان سایت مقصد باشد هدایت می کنید.


Server.Transfer :

خاصیت Server وب فرمها شی سرور را ایجاد کرده که نمونه ای از کلاس HttpServerUtility می باشد . با فرا خوانی این متد ASP.NET ، پردازش درخواست کنونی را متوقف نموده و کاربر را به صفحه دیگری هدایت می کند. یک اثر جانبی استفاده از Server.Transfer در نمونه ای مانند زیر:

//suppose code-behind for FirstPage.aspx

procedure TFirstPage.Button1_Click(

    sender: System.Object;

    e: System.EventArgs);

begin

  Server.Transfer('SecondPage.aspx');

end;

می تواند آن باشد که URL نمایش داده شده در مرورگر کاربر زمانیکه او در حال بازدید از صفحه دوم است هنوز همان آدرس صفحه اول باقی مانده است! توجه داشته باشید استفاده از Server.Transfer نیاز به چرخه گردشی مجدد و اضافی به سمت سرور نخواهد داشت. یک نتیجه جالب دیگر از اجرای دستور Server.Transfer آن است که صفحه فرا خوانی شده به طور کامل اجرامی شود. معنی این حرف آن است که اگر صفحه کنونی را از طریق کد پنهان و به روش Server.Transfer فرا خوانی کنید خاصیت IsPostback آن False شده و در نتیجه تمام کدهای نوشته در محدوده Initialization  صفحه نیز دوباره اجرا می شود .


یک روش دیگر جهت مسیر دهی به صفحه کنونی بدون تحریک نمودن پست بک استفاده ازخاصیت ( نمونه ای از کلاس System.Uri ) شی HTTPRequest می باشد. خاصیت URL اطلاعات مربوطه به URL در خواست کنونی را به دست می آورد . روش فرا خوانی چنین است :

Response.Redirect(Request.Url.ToString);