これは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 ページのようにまったく起動しません。これは、コントロールを再バインドするための正しいセクションだと思います。