قطعا در بسیاری از Applicationها
برای شما
مواردی پیش آمده
است که نیاز داشتهاید صفحهای خاص را در یک پنجره
Popup باز کنید. اما آیا راهی
برای انجام این کار با استفاده از کدنویسی در
Code Behind
وجود دارد؟
پاسخ مثبت است.
قطعا در بسیاری از
Applicationهای
شما مواردی پیش آمده است که شما نیاز داشتید صفحهای خاص را در یک پنجره
Popup
باز کنید. این کار به سادگی با استفاده از یک خط کدنویسی ساده جاوا اسکریپت امکان
پذیر است. حتی در صورتی که فایلی که کد جاوا اسکریپت شما در آن قرار می گیرد یک
فایل Server Side
باشد نیز به علت اینکه در تمامی زبانهای
Server Side
پیش از ASP.NET
کلیه کدها به صورت
Block
Script
و لابلای کدهای HTML قرار می گرفت منعی در استفاده از بلاکهای جاوا اسکریپت نیز
وجود نداشت. با ظهور
ASP.NET
و قابلیت قدرتمند آن یعنی
Code Behind
برنامه نویسان از کلنجار رفتن با کدهای تو در توی طولانی رها شده و کلیه کدهای
Server Side
خود را در Code
Behind می
نویسند و حاصل کار آنها یک فایل
aspx.
است که در آن اثری از کدنویسی غیر از تگهای
HTML
(و تگهای توسعه یافته
ASP.NET)
دیده نمیشود. حال اگر شما بخواهید یک
Popup
باز کنید چه میکنید؟ آیا تابع جاوا اسکریپت بازکننده
Popup
را لابلای کدهای
HTML صفحه خود
مینویسید؟ این روش به نظر صحیح نمی آید. چرا که ما خود را از قابلیت خوانانویسی
کدهای HTML محروم کرده و باز قسمتی از برنامه نویسی خود را به درون فایل
اصلی خود انتقال دادهایم. چه می توان کرد؟ آیا راهی برای اینکه ما با استفاده از
کدنویسی در Code Behind
یک Popup
باز کنیم هست؟ پاسخ مثبت است. در ادامه مقاله به این موضوع می پردازیم: در این روش
در واقع ما کدهای جاوا اسکریپت خود را به صورت یک
attribute
به کنترل مورد نظر خود
Add
می کنیم. اما برای اینکه برای هر کنترل کدنویسی را تکرار نکنیم این قسمت را درون یک
ساب روتین قرار می دهیم:
using System.Web.UI.WebControls;
public void
OpenPopUp(WebControl opener,
string PagePath) {
string
clientScript;
clientScript = "window.open('" + PagePath + "')";
opener.Attributes.Add("OnClick", clientScript);
}
طرز
کار بسیار ساده است! مقادیر ورودی یک کنترل و صفحهای است که باید
باز شود. کد جاوا اسکریپت در یک متغیر رشتهای به نام
clinetString
قرار داده میشود و با استفاده از متد
Add
به کنترل اضافه میشود. متد
Add دو مقدار دریافت میکند: ابتدا نام
property
و یا
event
و سپس مقدار آن که پس از
Generate
شدن صفحه به تگ
HTML تولید شده اضافه میشود.
حال شما میتوانید به راحتی به صورت زیر از این روتین استفاده
کنید:
OpenPopup(Button1, "http://www.google.com");
که در آن
Butoon1 یک کنترل از نوع asp:button
است. طرز کار بدین صورت است که پنجره بلافاصله پس از فراخوانی روتین باز نمیشود
بلکه کنترل شما را برای رویداد مورد نظر تنظیم میکند و در هنگام وقوع رویداد (مثلا
کلیک کردن روی دکمه) روتین اجرا میشود.
با کمی کدنویسی اضافه میتوان ظاهر پنجره باز شده را نیز کنترل کرد. برای مثال شما
می توانید طول و عرض پنجره، عنوان آن، اسکرول بار و... را تنظیم کنید:
public shared void
OpenPopUp(WebControl opener,
string PagePath,
string
windowName,
int width
, int height) {
string
windowAttribs;
string
clientScript;
windowAttribs = "width=" + width + "px," + "height=" + height + "px,"
"left='+((screen.width -" & width & ") / 2)+'," +
"top='+ (screen.height - " & height & ") / 2+'";
clientScript = "window.open('" + PagePath + "','" + windowName + "','" +
windowAttribs + "'); return false;";
opener.Attributes.Add("OnClick", clientScript);
}
مزیت استفاده از این روش این است که به علت اینکه شما این تابع را یک بار و آن هم
در کلاس و یا
Code Behind
قرار میدهید میتوانید به راحتی خطاهای برنامه نویسی خود را قبل از اینکه اجرای کد
خود را آغاز نمایید، پیدا کنید.