C# 在ASP.net中维护动态添加的控件
我一直在研究如何在Webforms应用程序中维护动态添加的UserControl的viewstate。我已创建名为Set.ascx的用户控件:C# 在ASP.net中维护动态添加的控件,c#,asp.net,webforms,C#,Asp.net,Webforms,我一直在研究如何在Webforms应用程序中维护动态添加的UserControl的viewstate。我已创建名为Set.ascx的用户控件: <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Set.ascx.cs" Inherits="CustomControlLab.Set" %>   <asp:Label ID="BodyArea" CssClass="SetLabel" runat
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Set.ascx.cs" Inherits="CustomControlLab.Set" %>
 
<asp:Label ID="BodyArea" CssClass="SetLabel" runat="server" Text="Label"></asp:Label>
 
<asp:Label ID="Exercise" CssClass="SetLabel" runat="server" Text="Label"></asp:Label>
 
<asp:Label ID="SetNo" CssClass="SetLabel" runat="server" Text="Label"></asp:Label>
 
<asp:Label ID="Reps" CssClass="SetLabel" runat="server" Text="Label"></asp:Label>
这将正确地将我的用户控件添加到我的面板控件权重列表中。我无法解决的是如何在page init事件中成功地重新创建这些控件?我想这和控制ID有关吧?或许我的方法永远不会奏效。任何反馈都会非常有用
在Tims注释之后,我不确定如何使用ID重新加载UserCOntrol。如果返回,我在Page_load事件中尝试了此操作:
else
{
if(ViewState["Sets"] != null)
{
int sets = (int)ViewState["Sets"];
for (int i = 0; i < sets; i++)
{
Set set = new Set();
set = (Set)Page.FindControl(string.Format("MainContent_set{0}", i + 1));
WeightList.Controls.Add(set);
}
}
}
按照呈现到页面上的内容,我想我可以做以下事情(这不起作用!!)
else
{
如果(ViewState[“设置”]!=null)
{
int集合=(int)ViewState[“集合”];
对于(int i=0;i
但这也不行。我想我在这里遗漏了一些明显的东西?在页面加载中尝试以下内容:
if(ViewState["Sets"] != null)
{
int sets = (int)ViewState["Sets"];
for (int i = 0; i < sets; i++)
{
Set set = new Set();
set.ID = string.Format("set{0}", i);
WeightList.Controls.Add(set);
}
}
if(ViewState[“set”]!=null)
{
int集合=(int)ViewState[“集合”];
对于(int i=0;i
只要您在页面上有一个Id正确的控件,那么将从viewstate为您加载值。您只需使用正确的Id(count变量)重新创建它。感谢您的建议,尽管我已经尝试过,但这不起作用。可能是因为我没有在OnInit事件中添加he控制吗?@Luthervd尝试一下,看看会发生什么。渲染的控件数量是否正确?
 
<span id="MainContent_set1_BodyArea" class="SetLabel">All Exercises</span>
 
<span id="MainContent_set1_Exercise" class="SetLabel">Bench Press</span>
 
<span id="MainContent_set1_SetNo" class="SetLabel">1</span>
 
<span id="MainContent_set1_Reps" class="SetLabel">3</span>
public partial class Set : System.Web.UI.UserControl
{
public string _exercise { get { return Exercise.Text; } set { Exercise.Text = value; } }
public string _bodyArea { get { return BodyArea.Text; } set { BodyArea.Text = value; } }
public string _setNumber { get { return SetNo.Text; } set { SetNo.Text = value; } }
public string _reps { get { return Reps.Text; } set { Reps.Text = value; } }
protected void Page_Load(object sender, EventArgs e)
{
}
}
else
{
if(ViewState["Sets"] != null)
{
int sets = (int)ViewState["Sets"];
for (int i = 0; i < sets; i++)
{
Set set = new Set();
Label templbl = (Label)Page.FindControl(string.Format("MainContent_set{0}_BodyArea", i + 1));
set._bodyArea = templbl.Text;
//Other code to get rest of control values
WeightList.Controls.Add(set);
}
}
}
if(ViewState["Sets"] != null)
{
int sets = (int)ViewState["Sets"];
for (int i = 0; i < sets; i++)
{
Set set = new Set();
set.ID = string.Format("set{0}", i);
WeightList.Controls.Add(set);
}
}