Friday, December 24, 2010

Loading User Control Dynamically in ASP.NET


Hi Guys,
             
                 Recently i have got a requirement to load the user control dynamically in to a  page.When i drag and drop the user Control  in design surface run the app it is  working fine but when i load the User Control dynamically(Programmatically) .I am unable to find the Control while post back .So i have started dig the functionality and  finally i have Fixed the issue .Here is the solution .
Step#1              
                             Write the method which take user Control name as  a parameter .Call this method wherever it is required   Add the placeholder control to your page and name it as "plchUserCtrlContainer"

private void LoadUserControl(string urcName)    
{
string path = Server.MapPath(@"~\Controls\" + urcName + ".ascx");
if (System.IO.File.Exists(path))
{
Session[
"FormName"] = urcName;
Control ucMainControl = LoadControl(@"
~\Controls\" + urcName + ".ascx");
if (ucMainControl != null)
{
plchUserCtrlContainer.Controls.Clear();
ucMainControl.ID = Session["FormName"].ToString();
plchUserCtrlContainer.Controls.Add(ucMainControl);

}
}
}



Step#2       
        Write Page OnInit event functionality as i have specified below .



override protected void OnInit(EventArgs e)
{

Session["FormName"] = Request["FormName"].ToString();
Control ucMainControl = LoadControl(@"~\Controls\" + Session["FormName"] + ".ascx");
plchUserCtrlContainer.Controls.Clear();
ucMainControl.ID = Session["FormName"].ToString();
plchUserCtrlContainer.Controls.Add(ucMainControl);

}



Step#3       
         You  can find the control using following  line of code




protected void btnsave_Click(object sender, EventArgs e)
{

Control assControl = (Control)FindControl(Session["FormName"].ToString());
}

Happy coding …..