Похоже, что несколько вопросов об этом были опубликованы, но ни один из них, похоже, не устранил мою проблему. У меня есть пользовательский контроль внутри ретранслятора. Пользовательский элемент управления имеет одно общедоступное свойство только с помощью геттера/сеттера. Связывание данных происходит нормально при начальной загрузке страницы, но при выборе фильтра из выпадающего меню первый повторитель связывается в порядке, но второй ретранслятор, содержащий пользовательский элемент управления, показывает значение null для свойства. Так, к фактическому коду:Свойство управления пользовательским элементом ASP.NET в повторителе равно null после обратной передачи
Моих два повторителей выглядеть следующим образом:
<asp:Repeater ID="rptTransactionVisual" runat="server" OnItemDataBound="rptTransactionVisual_ItemDataBound">
<ItemTemplate>
<%#Eval("TransactionAmount")%>
^- Я имел в для проверки здравомыслия - это всегда получает значение, даже если ниже сделка получает нулевое значение, так что я знаю, что получение источника данных и быть с привязкой к данным «Runat =» сервер»/>
<asp:Repeater ID="rptTransactions" runat="server" OnItemDataBound="rptTransactions_ItemDataBound" OnDataBinding="rptTransactions_DataBinding">
<ItemTemplate>
<tr>
<td><%#DataBinder.Eval(Container.DataItem, "TransactionDate", "{0:MM/dd/yyyy}")%></td>
<td><asp:Literal ID="ltlTransactionAmount" runat="server" /></td>
<td><asp:Literal ID="ltlClient" runat="server" /></td>
<td><asp:Literal ID="ltlTransactionType" runat="server" /></td>
<td><asp:Literal ID="ltlSector" runat="server" /></td>
</tr>
</ItemTemplate>
</asp:Repeater>
Я связывание значения т ор повторитель к источнику данных второго ретранслятора, так как они одни и те же:
protected void rptTransactions_DataBinding(object sender, EventArgs e)
{
rptTransactionVisual.DataSource = rptTransactions.DataSource;
rptTransactionVisual.DataBind();
}
Вот соответствующий код из пользовательского элемента управления, который прекрасно работает на начальном этапе, но после фильтрации, сделка всегда нуль;
public Transaction transaction { get; set; }
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (transaction == null) return;
....
Вот код для фильтрации:
protected void ddTransactionType_SelectedIndexChanged(object sender, EventArgs e)
{
var transactions = getChildPages().Where(p => p.TransactionType == ddTransactionType.SelectedValue).ToList<TransactionPage>();
}
rptTransactions.DataSource = transactions;
rptTransactions.DataBind();
//databinding happens always for the list repeater, and I do see the visual repeater being databound with the correct datasource
}
Я избил мою голову к стене на этом.
Спасибо, это правильный ответ. Вы должны загрузить элемент управления динамически. –