2009-12-09 34 views
0

我在具有單箇中繼器的頁面內控制用戶。問題是當這個控件被放置在中繼器複選框中時不會觸發CheckedChanged事件。如果這將是一個動態添加的控件,我會檢查CheckedCanged事件是否在Init()中分配了句柄,但這裏的事件是在ascx中指定的,所以我想asp.net負責在正確的位置完成所有的任務。我迷失在這裏:/中繼器內用戶控制內的複選框不會觸發

順便說一句。將單個複選框放在中繼器內不會觸發。但我至少可以使用OnItemCommand有

用戶控制

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="QuoteContainer.ascx.cs" Inherits="EhdSite.Controls.QuoteContainer" %> 
<asp:TableRow runat="server" ID="trQuoteRow"> 
    <asp:CheckBox runat="server" ID="cbxConfirm" AutoPostBack="true" OnCheckedChanged="CbxConfirmCheckedChanged" /> 
</asp:TableRow> 

<body> 
    <form id="form1" runat="server"> 
    <asp:ScriptManager ID="ScriptManager2" runat="server" /> 

    <asp:UpdatePanel runat="server" ID="upQuotes" UpdateMode="Conditional" ChildrenAsTriggers="false"> 
     <ContentTemplate> 
      <asp:Repeater runat="server" ID="rptQuotes"> 
       <ItemTemplate> 
        <ehd:QuoteContainer 
         runat="server" 
         ID="qcQuote" 
         RowCssClass="rowStyle" 
         HighlightedRowCssClass="selectedRowStyle" 
         Quote="<%# Container.DataItem %>" 
         OnQuoteSelectedChanged="QuoteSelectedChanged" /> 
       </ItemTemplate> 
       <FooterTemplate> 
        </table> 
       </FooterTemplate> 
      </asp:Repeater> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
    </form> 
</body> 
+1

在此情況下,你綁定的中繼?如果你在OnPreRender中使用它,它肯定無法工作!我需要看到usercontrol和頁面的代碼隱藏,或者至少有關中繼器和checkbox的部分... – Vinz 2009-12-09 10:42:24

+0

In page Page_Load – 2009-12-09 10:53:22

+0

我將它移動到Page_Init並開始工作。你能解釋它作爲這個問題的答案,所以我可以給你信用? – 2009-12-09 10:56:07

回答

2

它與在ASP.Net事件鏈做的,這有助於MSDN page理解它。

.Net框架解決了Init - 和Load-事件之間的ViewState。所以如果控制不在Init-事件之後,它的ViewState永遠不會被加載,並且它的事件永遠不會被觸發。

這可以得到有時相當棘手,特別是如果一個動態加載的控制應該不會影響另外一個加載...