باز کردن پنجره Popup در ASP.NET با استفاده از Code Behind
قطعا در بسیاری از 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 قرار میدهید میتوانید به راحتی خطاهای برنامه نویسی خود را قبل از اینکه اجرای کد خود را آغاز نمایید، پیدا کنید.