2014-10-08 57 views
0

看起来好像有几个问题已经发布,但没有一个能够解决我的问题。我有一个中继器内的用户控件。用户控件只有一个公共属性,只有一个getter/setter。数据绑定在初始页面加载时发生得很好,但是当从下拉菜单中选择过滤器时,第一个中继器绑定没问题,但包含用户控件的第二个中继器对于该属性显示为空。因此,在实际代码:中继器中的ASP.NET用户控件属性在回发后为空

我的两个中继器看起来像这样:

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

我绑定的t值运算中继到第二中继器的数据源,因为它们是相同的:

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 repeater 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

谢谢,这是正确的答案。您必须动态加载控件。 – 2016-05-17 14:40:20

相关问题