在Page_Load上,我正在使用EF4绑定一个Repeater。中继器包含一些文本框,在开始时填充,但用户可以编辑。如何在以后的回发中读取这些文本框?
page.aspx (提取液):
<asp:Repeater ID="repOrders" runat="server">
<ItemTemplate>
<p>
<%# Eval("Id") %> -
<asp:TextBox ID="txtName" Text='<%# Eval("Name") %>' runat="server">
</asp:TextBox>
</p>
</ItemTemplate>
</asp:Repeater>page.aspx.cs (提取液):
protected void Page_Load(object sender, EventArgs e) {
using (var ctx = new Ctx()) {
var ds = ctx.Orders;
repOrders.DataSource = ds;
repOrders.DataBind();
}
}
protected void lnkCheck_Click(object sender, EventArgs e) {
Response.Write(((TextBox)repOrders.Items[0].FindControl("txtName")).Text);
}问题是,当我单击lnkCheck时,Repeater首先从数据库中重新填充,这样就丢失了对文本框的任何用户更改。
如果我将if (IsPostBack) return;放在Page_Load中,那么Repeater是空的。
我怎么才能避开这一切?
发布于 2011-07-24 13:49:32
如果不是回发,只填充中继器。只要为中继器启用viewstate,您的数据就会被持久化。
protected void Page_Load(object sender, EventArgs e) {
if(!IsPostBack)
{
using (var ctx = new Ctx()) {
var ds = ctx.Orders;
repOrders.DataSource = ds;
repOrders.DataBind();
}
}
}如何提高“稍后回发”以从中继器读取文本值?通常的首选是从中继器中引发一个item命令,然后使用find控件获取项目模板中textbox的值。
https://stackoverflow.com/questions/6807125
复制相似问题