我有一个通过转发器动态生成的标签,rollNo是一个标签,它是itemTemplate的一部分。当我检查l的值时,它进入if块但是l.Text仍为空。 check.Text只返回“d”。为什么呢?
Label l = (Label)item.FindControl("rollNo");
TextBox t = (TextBox)item.FindControl("quiz1");
if (l != null)
{
string a = l.Text;
check.Text = "d"+a;
}
答案 0 :(得分:1)
您的代码示例尚未完成,因为其中没有 rollNo ,但我可以告诉您一些事情...... 您正在使用转发器并使用模板...您在模板中使用的ID永远不会是您的任何控件的运行时ID!想一想!假设您已将 rollNo 分配给模板中的某个元素,并且您有10行要传递给转发器。您是否希望拥有10个具有相同ID rollNo 的控件?!我希望不是! 因此,在模板中使用id时,FindControl将不返回任何内容... 你必须重新考虑你想要什么或使用不同的方法来找到控件(循环)......
答案 1 :(得分:0)
转发器加价:
<asp:Repeater id="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand">
<ItemTemplate>
<tr onclick="rowReturn(this)">
<td><asp:Label CssClass="form-control" runat="server" ID="rollNo"><%# DataBinder.Eval(Container.DataItem, "sid") %></asp:Label></td>
<td><asp:TextBox CssClass="form-control" runat="server" ID="quiz1" required></asp:TextBox></td>
<td><asp:TextBox CssClass="form-control" runat="server" ID="quiz2" required></asp:TextBox></td>
<td><asp:Button CssClass="btn btn-success btn-sm form-control" ID="add" CommandName="add" runat="server" Text="Add" CommandArgument='<%#DataBinder.Eval(Container.DataItem, "sid") %>' /></td>
</tr>
</ItemTemplate>
代码背后:
TextBox t1;
TextBox t2;
string rollNumber, T1, T2;
if (e.CommandName == "add")
{
// get CommandArgument you have selected on the button
string roll = e.CommandArgument.ToString();
rollNumber = roll;
foreach (RepeaterItem item in Repeater1.Items)
{
t1 = (TextBox)item.FindControl("quiz1");
t2 = (TextBox)item.FindControl("quiz2");
T1 = t1.Text;
T2 = t2.Text;
//...DB code or any other code
}
}