我在一个带有单个转发器的页面中有用户控制权。问题是当此控件放在转发器内部时复选框不会触发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>
答案 0 :(得分:2)
它与ASP.Net中的事件链有关,这个MSDN page有助于理解它。
.Net框架解析了ViewState
- 和Init
- 事件之间的Load
。因此,如果在Init
- 事件之后控件不存在,则永远不会加载ViewState
,并且永远不会触发它的事件。
这有时会非常棘手,特别是如果一个动态加载的控件会影响另一个控件的加载......