HOW 2 LEARN ASP.NET
نویسنده : delshad
تاریخ  : ۱۳۸۸/۷/۲
امتیاز :
بازدید : 2275
موضوع : افزودن Web User Control (کنترل کاربر) به صورت داینامیک
توضیحات : در این مقاله نحوه اضافه کردن یک UserControl به صفحه به صورت Dynamic توسط PlaceHolder آموزش داده خواهد شد
     

افزودن کنترل های کاربر به صفحه به صورت داینامک (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

امیدوارم این مقاله برای شما مفید باشد 

فایل پروژه را می توانید از اینجا دانلود کنید


 

 

 
امتیاز بدهید :

نویسنده : امید omd166@yahoo.co.uk ۱۳۸۹ پنجم فروردين
با سلام و خسته نباشید از این آموزش کامل و حرفه ای اگر بخواهیم همین کار را برای یک صفحه دیگر انجام دهیم (مثلا مدیر سایت بخواد برای بعضی از کاربرانش ارسال پیام خصوصی بذارد و برای بعضی ها نذارد )باید چه کار کرد
نویسنده : mohsen vb_asp_net@yahoo.com ۱۳۸۸ شانزدهم آذر
با سلام من در یک سایت یک صفحه اصلی دارد که کار یک فروشگاه رو انجام میده(البته به صورت مثال) حالا می خوام وقتی بر روی مثلاً مدیریت کارمندان کلیک کنم یک صفحه دیگر برام باز شود که در آن صفحه یک منو دارای چند زیر منو برای insert و updateو delete و search وجود دارد حالا می خواهم وقتی بر روی مثلاً زیر منوی insert کلیک کردم در همون صفحه بدون postback یک کادری برام باز شود که من بتونم اطلاعاتم رو اونجا وارد کنم و سپس دکمه ثبت رو کلیک کنم برای این کار از چه کنترلی استفاده کنم و چگونه؟؟؟؟؟؟؟؟؟ ممنون میشم اگه دوستان کمکم کنند خیلی بهش احتیاج دارم

 
نظر بدهید :
لطفا سوالات فنی خود را در تالار گفتگو www.forum.how2learnasp.net مطرح نمایید
نام :  
ایمیل :    
نظرات :
 
Xml rss feed

 

Valid CSS! Atom rss feed
Ali Delshad Official Site