这已经让我发疯了 2 天 - 希望有人以前见过。
我有这个问题,第一次单击中继器或网格视图中的控件无法触发 ItemCommand 事件,所有后续单击都有效。控件被加载到 Base.aspx 上的占位符中,如下所示
private void LoadUserControl()
{
string controlPath = LastLoadedControl;
if (!string.IsNullOrEmpty(controlPath))
{
ph.Controls.Clear();
UserControl uc = (UserControl)LoadControl(controlPath);
ph.Controls.Add(uc);
}
}
我想知道这是否是一个视图状态问题,以及我应该在哪些页面事件中使用 DataBind()。我已经在不同的页面事件中尝试了数据绑定,在页面和控件上启用视图状态,而不会改变结果。
这是 GridView 模板,但我对中继器控件也有相同的行为,所以我不相信它是这个问题的控件。
<ItemTemplate>
<asp:RadioButton ID="rbEnable" GroupName="MyGroup" runat="server" Text="Enabled" Checked="<%# ((EducateMe.BaseTypes.AbstractLink)Container.DataItem).IsActive == true %>" />
<asp:RadioButton ID="rbDisable" runat="server" GroupName="MyGroup" Text="Disabled" Checked="<%# ((EducateMe.BaseTypes.AbstractLink)Container.DataItem).IsActive != true %>" />
<asp:Button ID="btnEnable" runat="server" CommandArgument="<% # Container.DataItemIndex %>" CommandName="Enable" ToolTip="Enable" Text="Save" />
<asp:Button ID="btnDisable" runat="server" CommandArgument="<% # Container.DataItemIndex %>" Visible="false" CommandName="Disable" ToolTip="Disable" Text="Disable" />
</ItemTemplate>
一些可能相关的进一步信息:
我注意到在用户控件的 Page_Load 事件中是我重新绑定控件的地方。这可能是控件状态被重写的原因,但是如果我在 ascx 中的该区域添加 if(!IsPostback),则此代码部分根本不会像在 aspx 页面上那样触发。我认为那将是重新绑定控件的正确部分。