2011-07-24 25 views
4

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

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,中继器重新首先从数据库中进行填充,以便对用户对文本框的更改丢失。

如果我把if (IsPostBack) return;放在Page_Load那么Repeater是空的。

我该如何解决这个问题?

回答

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(); 
     } 
    } 

    } 

你是如何提高'后回发'从中继器读取文本值?通常的首选项是从中继器提取itemcommand,然后使用find控件获取项目模板中的文本框的值。

+0

否,则repOrders.Items为空。 ViewState似乎没有工作 - 它(默认情况下)。有任何想法吗? (并且我正在研究“全部保存”功能,因此它不会从单个中继器项目中提出。) – James

+1

我不明白为什么它会是'空'。可能还有其他一些嫌疑犯。你能发布完整的html /代码吗? – FiveTools

+1

你说得很对。在进一步检查中,我在母版页中找到了一个Page.DataBind()。谢谢你指出我朝着正确的方向。 – James