在 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/