我有一个列表
List<DashboardFinancialDates> financialDates = new List<DashboardFinancialDates>();
然后我将此列表绑定到作为数据源的转发器上
FinancialDates.DataSource = financialDates;
FinancialDates.DataBind();
这是我的中继器控件
<asp:Repeater ID="FinancialDates" runat="server">
<HeaderTemplate>
<table class="DashboardConfigTable">
<thead>
<tr>
<th>Month</th>
<th>Start Date</th>
<th>End Date</th>
</tr>
</thead>
<tbody>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td> <%# Eval("Month") %></td>
<td><input type="text" class="datepicker" value="<%# Eval("StartDate")%>" /></td>
<td><input type="text" class="datepicker" value="<%# Eval("EndDate")%>" /></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</tbody>
</table>
</FooterTemplate>
</asp:Repeater>
现在,我正在通过编辑文本框datepicker进行更改,并且我认为中继器将使用更新后的数据自动修改数据源,但那没有发生。有人可以告诉我如何从提交页面的中继器中获取编辑后的值。
谢谢
答案 0 :(得分:1)
回发后,您必须从转发器中检索数据。为此,您需要使用ASP.NET控件来显示和编辑标记中的数据:
<ItemTemplate>
<tr>
<td>
<asp:Label ID="lbl" runat="server" Text='<%# Eval("Month") %>'></asp:Label></td>
<td>
<asp:TextBox ID="txtDateFrom" runat="server" CssClass="datepicker" Text='<%# Eval("StartDate")%>' /></td>
<td>
<asp:TextBox ID="txtDateTo" runat="server" CssClass="datepicker" Text='<%# Eval("EndDate")%>' /></td>
</tr>
</ItemTemplate>
回发后,您可以像这样检索数据:
private IEnumerable<Tuple<string, DateTime, DateTime>> GetUpdatedItems()
{
var lst = new List<Tuple<string, DateTime, DateTime>>();
var items = rpt.Items
.OfType<RepeaterItem>()
.Where(x => x.ItemType == ListItemType.Item
|| x.ItemType == ListItemType.AlternatingItem);
foreach (var item in items)
{
var month = ((Label)item.FindControl("lbl")).Text;
var dateFromStr = ((TextBox)item.FindControl("txtDateFrom")).Text;
var dateToStr = ((TextBox)item.FindControl("txtDateTo")).Text;
var dateFrom = DateTime.Parse(dateFromStr);
var dateTo = DateTime.Parse(dateToStr);
lst.Add(Tuple.Create(month, dateFrom, dateTo));
}
return lst.ToArray();
}
该代码遍历Repeater项并检索控件的值。
如果需要该项目的ID,则可以将HiddenField添加到ItemTemplate并在回发期间检索它。