asp.net - 从中继器中检索 TextBox 值

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

Page_Load ,我正在使用 EF4 绑定(bind)中继器。转发器包含一些在开始时填充但用户可以编辑的文本框。如何在以后的回发中阅读这些文本框?

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那么中继器是空的。

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

最佳答案

如果不是回发,则仅填充转发器。只要为转发器启用了 View 状态,您的数据就会被保留。

 protected void Page_Load(object sender, EventArgs e) {

    if(!IsPostBack)
    {
     using (var ctx = new Ctx()) {
        var ds = ctx.Orders;
        repOrders.DataSource = ds;
        repOrders.DataBind();
      }
    }

    }

您如何提高“稍后回发”以从转发器读取文本值?通常的偏好是从转发器中引发 itemcommand,然后使用 find 控件获取项目模板中文本框的值。

关于asp.net - 从中继器中检索 TextBox 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6807125/

相关文章:

.net - Entity Framework 在匹配实体名称时将 '1' 附加到属性名称

c# - 在其图形中附加一个包含现有实体和新实体的实体(Entity Framework Core 1.1.0)

子实体的 Linq 表达式

asp.net - 获取 HTTP 响应自定义 header 时出错

asp.net - Web浏览器锁定: How to?

wpf - DataTemplate 绑定(bind)中未调用 ValueConverter

c# - 如何动态绑定(bind)两个 ViewModel 的公共(public)属性? (MVVM,ViewModel-First)

c# - 如何使用 SQL 值动态填充列表框

c# - 加载页面时将 <li> 类更改为事件

c# - 什么时候应该使用标准的 html 标签/输入,什么时候应该使用 asp.net 控件?