2014-10-08 2 views
0

게시 된 적이 있지만 내 문제를 해결하는 데는 문제가없는 것 같습니다. 리피터 내부에 사용자 정의 컨트롤이 있습니다. 사용자 정의 컨트롤에는 getter/setter가있는 공용 속성이 하나 있습니다. 첫 페이지로드시 데이터 바인딩이 제대로 수행되지만 드롭 다운 메뉴에서 필터를 선택하면 첫 번째 repeater가 바인딩되지만 사용자 정의 컨트롤을 포함하는 두 번째 repeater는 속성에 대해 null을 표시합니다. 그래서, 실제 코드에 : 리피터의 ASP.NET 사용자 정의 컨트롤 속성이 포스트 백 이후에 null입니다.

내 두 개의 중계기

는 다음과 같이 :

<asp:Repeater ID="rptTransactionVisual" runat="server" OnItemDataBound="rptTransactionVisual_ItemDataBound"> 
      <ItemTemplate> 
       <%#Eval("TransactionAmount")%> 

^- 내가 전성 검사를 위해 이것을에 있었다 - 항상 트랜잭션이 아래 수신하는 경우에도, 값을 가져옵니다 null 값, 그래서 그것을이 데이터 소스를 받고 바인딩 "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(); 
    } 

처음에 잘 작동 사용자 컨트롤에서 관련 코드이지만, 여과 한 후, 트랜잭션이 항상 null입니다;

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 
    } 

나는이에 벽에 내 머리를 구타했습니다 여기

public Transaction transaction { get; set; } 

    protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 

     if (transaction == null) return; 
.... 

는 필터링을위한 코드입니다.

답변

1

여전히 원래 포스트 백이 null 인 이유를 모르겠지만 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

감사합니다. 정답입니다. 컨트롤을 동적으로로드해야합니다. –

관련 문제