如何获取用户控件里面动态添加的控件值?

qq82655753 2011-10-16 12:06:55
webform如何获取用户控件里面动态添加的控件?

我自定义了一个用户控件,里面动态地添加了TextBox控件,如何在用户提交数据的时候获取用户控件里面的textbox值?
...全文
232 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq82655753 2011-10-16
  • 打赏
  • 举报
回复
看来是无法解决这个问题了
Simon飞 2011-10-16
  • 打赏
  • 举报
回复
用你定义的用户控件的FindControl()方法,方法参数是TextBox的ID,返回的是Control。转型为Textbox就行了
如果没有办法获得TextBox的ID,用UserControl的Controls属性。这个属性是一个Controls集合,
然后写如下代码:
foreach(Control cl in UserControl.Controls)
{
if(cl is TextBox)
{
(TextBox)cl//这就是你要获得的TextBox
}
}
qq82655753 2011-10-16
  • 打赏
  • 举报
回复
所有的EnableViewState都已经设为true了,但获取不到动态添加的控件。唉
qq82655753 2011-10-16
  • 打赏
  • 举报
回复
以上所说都行不通啊。动态添加的数量和类型是不确定的。

//用户控件代码,添加一个TextBox控件在已定义的Table1里面
public partial class uc_uctest : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
TableCell tc = new TableCell();
TextBox tb = new TextBox();
tb.EnableViewState = true;
tb.ID = "tb1";
tb.EnableViewState = true;
tb.Text = "dwodfls“;”";
tc.Controls.Add(tb);
TableRow tr = new TableRow();
tr.Cells.Add(tc);
this.Table1.Rows.Add(tr);
}

}
}


//在调用的页面的单击事件里面无法找到用户控件动态添加的TextBox控件
protected void Button1_Click(object sender, EventArgs e)
{
TextBox tb = this.Uctest1.FindControl("tb1") as TextBox;
tb.Text = "重新赋值";//这句话会引发异常,未定义的变量
}

晏子 2011-10-16
  • 打赏
  • 举报
回复
自定义控件,那可以给自定义控件公开一个属性,这个属性的get为添加的那个txtbox的值就可以了
qq82655753 2011-10-16
  • 打赏
  • 举报
回复
感谢jshi123
xuStanly 2011-10-16
  • 打赏
  • 举报
回复
楼上与的都可以取得控件.
另外要补充的是牵涉到自定义控件的时候,一定要注意自定义控件与页面加载顺序的问题.
一般来与最重要的是以下顺序:
1.控件的Page_Init事件
2.页面的Page_Init事件
3.页面的Page_Load事件
4.控件的Page_Load事件
楼主要按上述顺序在适当的事件中写代码.
再有,如果控件中用到了ViewState,就要注意调用控件的页面的EnableViewState是否为true
风骑士之怒 2011-10-16
  • 打赏
  • 举报
回复
你动态添加textbox的时候,应该设置了其ID

利用FindCOntrol来查找指定ID的控件


TextBox tbx = WebUserControl1.Controls[0].FindControl("a") as TextBox;
if (tbx != null)
{
Response.Write(tbx.Text);
}
jshi123 2011-10-16
  • 打赏
  • 举报
回复
你必须保证每次初始化时都创建和上次提交时一样的动态控件才能去到它的值。
看下面这个例子:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="UserControl.Controls.WebUserControl1" %>
<asp:Table id="Table1" runat="server"></asp:Table>


public partial class WebUserControl1 : System.Web.UI.UserControl
{
public int Rows
{
get { return (int)(ViewState["Rows"] ?? 1); }
set { ViewState["Rows"] = value; Page_Load(null, null); }
}

public int Cols
{
get { return (int)(ViewState["Cols"] ?? 1); }
set { ViewState["Cols"] = value; Page_Load(null, null); }
}

protected void Page_Load(object sender, EventArgs e)
{
List<TableRow> rows = new List<TableRow>();
for (int i = 0; i < Rows; i++)
{
TableRow tr = new TableRow();
for (int j = 0; j < Cols; j++)
{
TableCell tc = new TableCell();
TextBox tb = new TextBox();
tb.ID = "tb" + i + "_" + j;
tb.Text = GetValue(i, j);
tc.Controls.Add(tb);
tr.Cells.Add(tc);
}
rows.Add(tr);
}
this.Table1.Controls.Clear();
this.Table1.Rows.AddRange(rows.ToArray());
}

public string GetValue(int row, int col)
{
TextBox tb = FindControl("tb" + row + "_" + col) as TextBox;
return tb != null ? tb.Text : "";
}
}



测试页面:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>
<%@ Register Src="~/WebUserControl1.ascx" TagName="WebUserControl1" TagPrefix="my" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>test</title>
</head>
<body>
<form id="form1" runat="server">

<my:WebUserControl1 ID="WebUserControl1" runat="server" />

<asp:Button ID="Button1" runat="server" Text="添加行" OnClick="AddRow" />
<asp:Button ID="Button2" runat="server" Text="添加列" OnClick="AddCol" />
<asp:Button ID="Button3" runat="server" Text="显示当前动态控件中的值" OnClick="ShowValues" /><br />
<asp:Label ID="Label1" runat="server"></asp:Label>

</form>
</body>
</html>

<script runat="server">
protected void AddRow(object sender, EventArgs e)
{
this.WebUserControl1.Rows++;
}

protected void AddCol(object sender, EventArgs e)
{
this.WebUserControl1.Cols++;
}

protected void ShowValues(object sender, EventArgs e)
{
string values = "";
for (int i = 0; i < WebUserControl1.Rows; i++)
{
for (int j = 0; j < WebUserControl1.Cols; j++)
{
values += (j > 0 ? ", " : "") + WebUserControl1.GetValue(i, j);
}
values += "<br>";
}
Label1.Text = values;
}
</script>

62,266

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧