After 16 hours of frustration, I've managed to solve this problem for a
project I'm working on.
The 'trick' is set EnableViewState="False" for the asp:textbox inside
the Repeater control.
The problem is that by default the asp:textbox ViewState is True. This
means that the textbox value is automatically preserved between postback
(saved in the __VIEWSTATE hidden field and restored during a page
postback).
If EnableViewState="True", the FindControl finds a 'copy'
of the asp:textbox control with it's initial value; not the postback
value. The postback value (whatever you type in the textbox AFTER the
page has loaded seems to get overridden because there is already a
control in memory with your texbox name). In my case FindControl returns
the Text property of the textbox as "".
Anyway, here's the solution:
--------------------
-------------------- ASPX
--------------------
<asp:Repeater
ID="Repeater1"
EnableViewState="False"
runat="server">
<ItemTemplate>
<asp:TextBox
ID="txtFirstName"
runat="server"/>
</ItemTemplate>
</asp:Repeater>
--------------------
-------------------- C#
--------------------
foreach (RepeaterItem item in Repeater1.Items)
{
Response.Write( ((TextBox)item.Controls[1]).Text);
}
-------------------- OR
foreach (RepeaterItem item in Repeater1.Items)
{
TextBox FirstName = (TextBox)item.FindControl("txtFirstName");
Response.Write(FirstName.Text);
}
I'm using Visual Web Developer 2005 Express Edition Beta running .NET
version 2_0_50215 on Windows 2000 Professional.
Hope this helps,
Bill
(e-mail address removed)
08.16.2005