【问题标题】:Retrieving TextBox value from a Repeater从中继器中检索 TextBox 值
【发布时间】:2011-07-24 13:44:37
【问题描述】:

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

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

我该如何解决这个问题?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 否,则 repOrders.Items 为空。 ViewState 似乎不起作用 - 它处于打开状态(默认情况下)。有任何想法吗? (而且我正在开发“全部保存”功能,因此它不会从单个中继器项目中引发。)
    • 我不明白为什么它会是“空的”。应该还有别的嫌疑人。能把后面的完整html/代码贴出来吗?
    • 你说的很对。经过进一步检查,我在我的母版页中发现了一个 Page.DataBind()。感谢您为我指明正确的方向。
    • 优秀。很高兴我能帮上忙。
    猜你喜欢
    • 2015-11-22
    • 2011-07-13
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多