访问所有的文本框id一次在cs文件中是在一个数据列表
本文关键字:文件 一个 列表 数据 cs id 一次 访问 文本 | 更新日期: 2023-09-27 18:17:41
我有一个数据列表,其中有一个占位符和占位符里面我有文本框。我需要访问那些文本框。当然,我可以这样做,但每个都必须单独访问。这将是漫长而乏味的,我在想如果有一种方法访问所有这些文本框一次。
<asp:DataList ID="profileDl" runat="server" OnItemDataBound="findMYcontrol" >
<ItemTemplate>
<div class="row">
<div class="col-lg-12 plcontTop " >
<asp:Image ID="imgP" runat="server" ImageUrl='<%#Eval("pp_path")%>' Height="115px" Width="150px" />
</div>
</div>
<div class="row">
<div class="col-lg-12" >
<asp:FileUpload ID="profileUP" runat="server"/>
<asp:Button ID="imgbutt" runat="server" class="btn btn-danger btn-block" OnClick="picClick" Text="Upload" />
<asp:PlaceHolder ID="profile_tb" runat="server">
<table class="tbl_ptb">
<tr>
<td><b> UserName: </b> </td>
<td><asp:TextBox ID="tb_uname" runat="server" Text='<%# Eval("name")%>'/></td>
</tr>
<tr>
<td><b> RealName: </b> </td>
<td><asp:TextBox ID="tb_rname" runat="server" Text='<%# Eval("name")%>'/></td>
</tr>
<tr>
<td><b> Email: </b> </td>
<td><asp:TextBox ID="tb_email" runat="server" Text='<%# Eval("email")%>' /></td>
</tr>
<tr>
<td><b> Address: </b> </td>
<td><asp:TextBox ID="Label8" runat="server" Text='<%# Eval("address")%>' /></td>
</tr>
<tr>
<td><b> Sex: </b> </td>
<td><asp:TextBox ID="tb_sex" runat="server" Text='<%# Eval("sex")%>' /></td>
</tr>
<tr>
<td><b> Account: </b> </td>
<td> <asp:TextBox ID="tb_acc" runat="server" Text='<%# Eval("acType")%>'/></td>
</tr>
</table>
<asp:Button ID="editmyprofile" class="btn btn-danger btn-block editbutt" runat="server" OnClick="savemyP" Text="save" />
</asp:PlaceHolder>
</div>
</div>
</ItemTemplate>
</asp:DataList>
我需要在相应的。cs文件中访问占位符profile_tb
内的所有文本框。
现在我已经访问了占位符
public void findMYcontrol(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
FileUpload fu = (FileUpload)e.Item.FindControl("profileUP");
fileup = fu;
PlaceHolder ph1 = (PlaceHolder)e.Item.FindControl("profile_lbl");
ph_lbl = ph1;
PlaceHolder ph2 = (PlaceHolder)e.Item.FindControl("profile_tb");
ph_tb = ph2;
}
}
和ph_lbl and ph_tb
作为页面变量。做同样的事情解决了问题,但它将是冗长的访问所有这些文本框id与这种方法。还有别的办法吗?
一个解决方案如下:
- 在您的占位符中,使用asp:table,而不是table,并为其设置Id (asp:table背后的代码与table相同)。在你的。cs文件中,使用FindControl方法通过id获取asp:table。有了表,您可以在for循环 中访问它的所有列和单元格
希望对您有所帮助
表上的
for如下所示:
foreach(TableRow tr in tableId.Rows)
{
//if your textbox is in an known cell, instead of this for loop you can
//get it by its index like tr.Cells[i]
foreach (TableCell tc in tr.Cells)
{
foreach (Control con in tc.Controls)
{
//check if con is of type textBox and get its text
}
}
}
您可以创建如下函数
IEnumerable<Control> EnumerateControlsRecursive(Control parent)
{
foreach (Control child in parent.Controls)
{
yield return child;
foreach (Control descendant in EnumerateControlsRecursive(child))
yield return descendant;
}
}
它将迭代并返回任何容器中的所有控件然后你可以在下面使用
foreach (Control c in EnumerateControlsRecursive(yourcontainerId))
{
if(c is TextBox)
{
// do something useful
}
}