我有一个数据绑定到 SqlDataSource 的转发器
<asp:Repeater runat="server" ID="Repeater" DataSourceID="SqlDataSource">
<ItemTemplate>
<asp:HiddenField runat="server" Value='<%# Eval("Code") %>' ID="Code" />
<asp:TextBox ID="NumberNeeded" runat="server" Text='<%# Eval("Needed") %>' /><br />
</ItemTemplate>
</asp:Repeater>
<asp:Button runat="server" ID="submit" Text="submit" OnClick="submit_Click" />
<asp:SqlDataSource ID="SqlDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="rtvFiltered" SelectCommandType="StoredProcedure">
<SelectParameters>
</SelectParameters>
</asp:SqlDataSource>
我想遍历转发器并在 submit_Click 中获取 NumberNeeded 中的值
protected void submit_Click(object sender, EventArgs e)
{
this.Repeater.DataBind(); //comment this guy and this.Repeater.Items has no items
foreach (RepeaterItem item in this.Repeater.Items)
{
String code = ((HiddenField)item.FindControl("JournalCode")).Value;
// below fails because "NumberNeeded" control doesn't have the Text input by the user.
int numNeeded = Int32.Parse(((TextBox)item.FindControl("NumberNeeded")).Text);
// Doing other stuff with numNeeded
}
}
转发器在页面上完美显示其项目,但是当我单击提交按钮时,this.Repeater.Items 为空(除非我在该方法中调用 this.Repeater.DataBind())。
我已经尝试在 !Page.IsPostBack 检查内外的 Page_Load 和 Page_Init 中显式地数据绑定Repeater,每次我要么没有得到任何项目,要么没有得到文本值。
过去,我在没有母版页的页面上获得了几乎相同的设置。我还注意到 this.Master.EnableViewState 在 submit_Click 方法中为 false,无论我在 Page_Init 还是 Page_Load 中将其设置为 true。this.EnableViewState 为真。