我有一个数据绑定(bind)到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中进行数据绑定(bind)中继器的显式尝试,并且每次我都没有获得Item或没有Text值时。
我过去在几乎没有主页的页面上获得了几乎完全相同的设置以进行工作。我还注意到,无论我是否在Page_Init或Page_Load中将其设置为true,this.Master.EnableViewState在commit_Click方法中均为false。 this.EnableViewState为true。
最佳答案
如您陈述的那样,您不需要在代码后面调用DataBind()
,因此问题可能出在数据检索上。您的存储过程是否带有任何参数?您是否尝试过将CancelSelectOnNullParameter="false"
添加到SqlDataSource中?
关于textbox - 仅当我在DataBind事件中的按钮单击事件中填充Repeater.Items,但所有文本框输入均为空时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16618020/