افزودن کنترل های کاربر به صفحه به صورت داینامک (Add User Control Dynamically)
اگر شما نیز یک برنامه نویس وب باشید مطمئنا به ساخت وب سایت به صورت ماژولار علاقه مند خواهید بود ، ماژولا کردن یک وب سایت به این معنی است که قابلیت اضافه و کم کردن ماژول (امکانات مانند ماژول اخبار ، ماژول گالری عکس و...) را داشته باشد .
یکی از بهترین روش ها برای ساخت ماژول استفاده از UserControl هاست که در مقاله زیر نحوه ساخت آنها را توضیح دادم :
کار با User Control ها (کنترل های کاربر) در Asp.NET قسمت اول
شما میتوانید برای هر کدام از ماژول ها یک User Control ساخته و آن ها را به صورت پویا به صفحه اضافه کنید
البته این کار بسیار ساده است
ابتدا یک کنترل PlaceHolder به صفحه اضافه کنید
سپس در بخش Code-Behind یک Property به صورت زیر تعریف کنید :
public string currentModule
{
get
{
return (string)ViewState["moduleName"];
}
set
{
ViewState["moduleName"] = value;
}
}
اگر در مورد خواص یا Property چیزی نمی دانید مقاله زیر را مطالعه فرمایید :
مفاهیم و مبانی شی گرایی قسمت سوم : خواص
پس از اضافه کردن خاصیت فوق یک تابع به نام addModule به صورت زیر بنویسید :
public void addModule(object moduleName)
{
PlaceHolder1.Controls.Clear();
UserControl uCtrl = (UserControl)Page.LoadControl(string.Format("~/Modules/{0}.ascx", moduleName));
uCtrl.ID = "dummyID";
PlaceHolder1.Controls.Add(uCtrl);
currentModule = moduleName.ToString();
}
این تابع کنترل کاربر مورد نظر شما را لود کرده و سپس به PlaceHolder اضافه می نماید و در نهایت خاصیت CurrentModule را برابر نام ماژول قرار می دهد ، این کار برای این است که در هر بار لود صفحه کنترل جاری از بین نرود .
دقت نمایید که بنده UserControl خود را در پوژه Modules قرار دادم برای همین از کد زیر برای مسیر دهی استفاده کردم :
string.Format("~/Modules/{0}.ascx", moduleName)
اکنون تابع addModule را به متد لود صفحه اضافه می کنیم :
protected void Page_Load(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(currentModule))
addModule(currentModule);
}
کار تمام است ، سیستم ماژولار شما ساخته شده است اکنون در هر متدی که مدنظر شماست میتوانید تابع addModule را فراخوانی کنید ، به عنوان مثال یک Button به صفحه اضافه کنید و در متد کلیک شدن آن ماژول مورد نظر را لود نمایید ، داریم :
protected void Button1_Click(object sender, EventArgs e)
{
currentModule = "YourModuleName";
addModule(currentModule);
}
همچنین کار جالب دیگری که میتوان انجام داد خوانده نام ماژول از QueryString در متد لود صفحه می باشد (مانند سیستم های مدیریت محتوا مثلا www.FastPage.ir) :
protected void Page_Load(object sender, EventArgs e)
{
if (Request["module"] != null && Request["module"].ToString() != "")
addModule(Request["module"].ToString());
}
اگر در مورد QueryString اطلاعات کافی ندارید مقاله زیر را مطالعه کنید :
انتقال اطلاعات بین صفحات توسط QueryString
امیدوارم این مقاله برای شما مفید باشد
فایل پروژه را می توانید از اینجا دانلود کنید