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