转发器中用户控件内的复选框不会触发

时间:2009-12-09 10:11:10

标签: asp.net

我在一个带有单个转发器的页面中有用户控制权。问题是当此控件放在转发器内部时复选框不会触发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 个答案:

答案 0 :(得分:2)

它与ASP.Net中的事件链有关,这个MSDN page有助于理解它。

.Net框架解析了ViewState - 和Init - 事件之间的Load。因此,如果在Init - 事件之后控件不存在,则永远不会加载ViewState,并且永远不会触发它的事件。

这有时会非常棘手,特别是如果一个动态加载的控件会影响另一个控件的加载......