use*_*384 6 textbox webforms repeater
我有一个数据绑定到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>
Run Code Online (Sandbox Code Playgroud)
我想迭代转发器并在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
}
}
Run Code Online (Sandbox Code Playgroud)
转发器在页面上完美地显示其项目,但是当我单击提交按钮时,this.Repeater.Items为空(除非我在该方法中调用this.Repeater.DataBind()).
我已经尝试在Page_Load和Page_Init中明确地对数据绑定Repeater进行!Page.IsPostBack检查内外,每次我得到没有Items或没有Text值.
我在过去没有母版页的页面上得到了几乎相同的设置.我也注意到,无论是否在Page_Init或Page_Load中将它设置为true,this_Master.EnableViewState在submit_Click方法中都是false.this.EnableViewState为true.
这是母版页上的 EnableViewState 设置。
在母版页的 Page_Load 方法中,this.EnableViewState 设置为 false。我将其更改为 Page.EnableViewState 并且一切正常。
this.EnableViewState = Page.EnableViewState; // add to Master page Page_Load method
Run Code Online (Sandbox Code Playgroud)
做啊