2014-10-08 1 views
0

Похоже, что несколько вопросов об этом были опубликованы, но ни один из них, похоже, не устранил мою проблему. У меня есть пользовательский контроль внутри ретранслятора. Пользовательский элемент управления имеет одно общедоступное свойство только с помощью геттера/сеттера. Связывание данных происходит нормально при начальной загрузке страницы, но при выборе фильтра из выпадающего меню первый повторитель связывается в порядке, но второй ретранслятор, содержащий пользовательский элемент управления, показывает значение 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 
    } 

Я избил мою голову к стене на этом.

ответ

1

Я до сих пор не знаю, почему оригинал был пустым после обратной передачи, но я решил его немного переработать событие Visual Remater ItemDataBound.

if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
     { 
      TransactionPage transaction = (TransactionPage)e.Item.DataItem; 
      TransactionPagePartial visual = (TransactionPagePartial)Page.LoadControl("~/Views/Pages/Partials/TransactionPagePartial.ascx"); 
      visual.transaction = transaction; 
      rptTransactionVisual.Controls.Add(tombstone); 
     } 
+0

Спасибо, это правильный ответ. Вы должны загрузить элемент управления динамически. –

Смежные вопросы