动态加载的Web用户控件隐藏在回发上

我有一个Web自定义控件

         

并在Default.aspx页面上

  

并在Default.aspx.cs上

  protected void btnPost_Click(object sender, EventArgs e) { WebUserControl1 uc = (WebUserControl1)Page.LoadControl("~/WebUserControl1.ascx"); PlaceHolder.Controls.Add(uc); } 

当我们从下拉列表中选择任何项目时,它会回发并且控件会从页面中隐藏

所以请帮助我们如何防止隐藏

谢谢

当您意识到每个回发创建一个新的Page类实例时, must be recreated on every postbackmust be recreated on every postback动态创建的控件,并且在此实例中,您必须每次都重新创建所有控件,这一点变得更加明显。

这是一篇很好的文章

关于这个的另一个post,我回答

而另一个

要维护回发之间的状态,可以使用ViewStateControlState

MSDN控制状态与视图状态示例

 protected void ddlnew_SelectedIndexChanged(object o, EventArgs e) { ViewState["ddlnew_value"]=ddlnew.selectdeitem; } 

比在页面加载pu这个

 If(IsPostBack) { if(ViewState["ddlnew_value"]!=null) { ddlnew.selecteditem=ViewState["ddlnew_value"]; } } 

这应该工作

在ASP.NET中,动态加载的控件需要一些注意力,因为它们在回发中的行为。 您必须在回发中维护Viewstate for Dynamic控件,或者check that on which control's is generating postback you will load the control or not..

查看这些文章(特别是MSDN参考):
广泛的用户控制检查 – MSDN
在UpdatePanel中动态加载UserControl
在回发中维护Viewstate for Dynamic控件

1)您需要在页面上启用视图状态。

2)与本文提到的其他人一样,您需要重新创建动态加载的用户控件。

这是一个例子:

 protected void Page_Load(object sender, EventArgs e) { Render(); } 

渲染方法:

 private void Render() { var list = Helpers.Content.Lists.GetListByTitle(); if (list != null && list.Items.Count > 0) { this.divContainer.Controls.Clear(); var i = 1; list.Items.ForEach(question => { this.divContainer.Controls.Add(RenderQuestion(question, i)); i++; }); } } 

渲染问题方法:

  private Control RenderQuestion(Entities.Modules.Item question, int count) { // Create question control var q = (Custom.Widgets.ActionPlans.New.Question)LoadControl("~/Custom/Widgets/ActionPlans/New/Question.ascx"); // Render question q.Render(question, count); return q; } 

希望这可以帮助。