2011-07-16 122 views
3
protected void addMoreDay_btn_Click(object sender, EventArgs e) 
     { 
      Control OneMoreDay = LoadControl("~/controls/Days/DayAdd.ascx"); 
      Days_div.Controls.Add(OneMoreDay); 
     } 

我将我的userControl动态加载到div元素..但问题是它只能工作一次! ..我的意思是我点击addMoreDay_btn按钮,它的工作原理,然后我尝试再次单击它不会创建我的控制的另一个实例!动态创建/加载用户控件只能使用一次!

编辑

,我认为它的工作原理,但它不保存最后创建一个..它只是与新创建的控制取代它..和我还是不怎样解决这个! = S

+0

尝试在功能附加两个控制而不是一个。如果你这样做,它有两个吗?如果不是,那么问题在其他地方(因为该部门正在被摧毁) –

+0

实际上它比这更复杂..这是关于页面生命周期..我必须把我所有的控制在数组中,并指定数字在PreInit事件中创建实例..我发现这个视频(这很复杂,我不能理解它到目前为止足以构建这个),但这是我现在所有的东西>> http://www.asp.net/ajax/videos/how-to-dynamic-add-controls-to-a-web-page – lKashef

回答

5

问题正在发生,因为动态添加的控件在每次回发之前正在销毁,直到它再次创建。为了让动态控件在回传中保持不变,每次页面回传时都必须添加它们。

请尝试下面的代码。请注意,在该方法Page_Init所添加的控制:

protected void addMoreDay_btn_Click(object sender, EventArgs e) 
{ 
    Control OneMoreDay = LoadControl("~/controls/Days/DayAdd.ascx"); 
    Days_div.Controls.Add(OneMoreDay); 
    Session["MyControl"] += 1 
} 


protected void Page_Init(object sender, EventArgs e) 
{ 
    for (int i = 1; i <= (int)Session["MyControl"]; i++) { 
     Control OneMoreDay = LoadControl("~/controls/Days/DayAdd.ascx"); 
     Days_div.Controls.Add(OneMoreDay);   
    } 
} 

参见here

+0

嗯,我刚才发现它们会因为页面循环和回发而被破坏......但是我不明白为什么用于创建控件的代码重复两次,并且是否有一种变量会持续通过回发而不是Session变量,因为它是一个对象,我在c#中遇到了一些问题,再加上我没有将最适合在真实世界的应用程序中加载会话变量的负载..你瘦了什么k? – lKashef

+0

这不能正常工作,因为它在我刷新页面时也会创建一个实例! – lKashef

+0

ViewState为您的控件维护的重要性如何?如果你不需要它,那么你可以将代码从Page_Init方法移动到addMoreDay_btn_Click事件。但是,如果您需要维护viewstate,则必须添加另一个会话变量来检查页面是否已刷新。无论哪种方式,这绝对是一个可以解决的问题。 –

相关问题