从Repeater中检索TextBox值

时间:2011-07-24 13:44:37

标签: asp.net entity-framework data-binding repeater

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,则转发器为空。

我怎样才能解决这个问题?

1 个答案:

答案 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控件获取项目模板中文本框的值。