gpt4 book ai didi

c# - 从更新面板中的表中获取动态添加的文本框的值

转载 作者:太空宇宙 更新时间:2023-11-03 21:44:15 25 4
gpt4 key购买 nike

下面是aspx中的控件。

 <asp:UpdatePanel runat="server" ID="panel" ChildrenAsTriggers="false" UpdateMode="Conditional">
<ContentTemplate>
<asp:PlaceHolder runat="server" ID="holder"></asp:PlaceHolder>
<asp:Button runat="server" ID="bt" Text="Add" onclick="AddTxt" />
<asp:Button runat="server" ID="btn1" Text="Refresh" onclick="btn1_Click" />
</ContentTemplate>

当单击添加按钮时,我正在创建一个动态表。下面是C#代码

protected void AddTxt(object sender, EventArgs e)
{
int tblRows = 3;
int tblCols = 3;

Table tbl = new Table();

for (int i = 0; i < tblRows; i++)
{
TableRow tr = new TableRow();
for (int j = 0; j < tblCols; j++)
{
TableCell tc = new TableCell();
TextBox txtBox = new TextBox();
txtBox.ID = "txt" + i.ToString() + j.ToString();
//txtBox.TextChanged += new EventHandler(txt_TextChanged);
tc.Controls.Add(txtBox);

tr.Cells.Add(tc);

if (Session["ctls"] != null)
{
Session["ctls"] += ";t";
}
else
{
Session["ctls"] = "t";
}
}

tbl.Rows.Add(tr);
}

holder.Controls.Add(tbl);

panel.Update();

}

当单击“刷新”按钮发生部分回发时,我无法获得用户在文本框中更新的值。控件将有空文本。

protected void Page_Load(object sender, EventArgs e)
{
foreach (Control c in holder.Controls)
{
if (c is TextBox)
{

}

}
}

protected override void OnInit(EventArgs e)
{
base.OnInit(e);

if (Session["ctls"] != null)
{
string[] ctls = Session["ctls"].ToString().Split(';');
foreach (string ctlType in ctls)
{
if (string.Compare(ctlType, "t") == 0)
{
holder.Controls.Add(new TextBox());
}
}
}
}

任何人都可以帮助/提示我如何解决更新面板内的动态控件。

最佳答案

问题是,当您在 AddTxt 方法中动态创建控件(表、行、单元格、文本框)时,您正在为文本框分配一个 ID 值,但是,当您在 OnInit 事件中动态创建控件时,您根本不会创建 ID 值,因此无法连接 ViewState用户输入的内容因此丢失。

如果您创建具有相同 ID 值 (txtBox.ID = "txt"+ i.ToString() + j.ToString();) 的文本框在其他动态控件创建逻辑中,您的 ViewState 值将被保留并在 OnInit 中重新创建时正确应用于文本框。

注意:ViewState 很大程度上依赖于服务器控件的 ID 值,以便在完整和部分回发之间正确关联控件值。

关于c# - 从更新面板中的表中获取动态添加的文本框的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17848791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com