在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
,则转发器为空。
我怎样才能解决这个问题?
答案 0 :(得分:1)
如果不是回发,则仅填充转发器。只要为转发器启用了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控件获取项目模板中文本框的值。