Вы должны получить данные из повторителя при обратной передаче.Чтобы это работало, вам нужно использовать элементы управления 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 и извлекает значения элементов управления.
Если вам нужен идентификатор для предмета, вы можете добавить HiddenField к ItemTemplate, а также получить его во время PostBack.