コードの抜粋:
<asp:UpdatePanel runat="server" ChildrenAsTriggers="true">
<ContentTemplate>
<asp:ValidationSummary runat="server" DisplayMode="List" />
<asp:GridView ID="MyGridView" runat="server" AllowPaging="true" AllowSorting="true"
DataKeyNames="itemId"
OnRowDataBound="MyGridView_RowDataBound"
onPageIndexChanging="MyGridView_PageIndexChanging"
onSorting="MyGridView_Sorting"
OnRowEditing="MyGridView_RowEditing"
OnRowCancelingEdit="MyGridView_RowCancelingEdit"
OnRowUpdating="MyGridView_RowUpdating"
OnRowDeleting="MyGridView_RowDeleting"
OnRowCommand="MyGridView_RowCommand"
AutoGenerateColumns="false"
onSelectedIndexChanged="MyGridView_SelectedIndexChanged"
CssClass="adminTable">
<Columns>
<asp:TemplateField HeaderText="Name" SortExpression="name">
<EditItemTemplate>
<asp:TextBox ID="editName" runat="server" Text='<%# Bind("name") %>' />
<asp:RequiredFieldValidator runat="server" ControlToValidate="editName"
ErrorMessage="Please enter a Name" Display="None" />
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="name" runat="server" Text='<%# Bind("name") %>' />
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="newName" runat="server" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="newName"
ErrorMessage="Please enter a Name" Display="None" />
</FooterTemplate>
</asp:TemplateField>
<%-- Some additional Similar Templates here --%>
<asp:TemplateField>
<EditItemTemplate>
<asp:LinkButton ID="linkUpdate" runat="server" CausesValidation="true"
CommandName="Update" Text="Save" />
<asp:LinkButton ID="linkCancel" runat="server" CausesValidation="false"
CommandName="Cancel" Text="Cancel" />
</EditItemTemplate>
<ItemTemplate>
<asp:LinkButton ID="linkEdit" runat="server" CausesValidation="false"
CommandName="Edit" Text="Edit" />
<asp:LinkButton ID="linkDelete" runat="server" CausesValidation="false"
CommandName="Delete" Text="Delete"
OnClientClick="return confirmDelete();" />
</ItemTemplate>
<FooterTemplate>
<asp:LinkButton ID="linkUpdate" runat="server" CausesValidation="true"
CommandName="Insert" Text="Save" />
<asp:LinkButton ID="linkCancel" runat="server" CausesValidation="false"
CommandName="Cancel" Text="Cancel" />
</FooterTemplate>
</asp:TemplateField>
</Columns>
<pagersettings mode="Numeric" position="Top" pagebuttoncount="10" />
<pagerstyle height="30px" verticalalign="Top" horizontalalign="Right" />
</asp:GridView>
<asp:LinkButton ID="LinkAdd" runat="server" OnClick="LinkAdd_OnClick" Text="Add"
CausesValidation="false" />
</ContentTemplate>
</asp:UpdatePanel>
シナリオ:
任意の行の [編集] ボタンをクリックします。コード ビハインド OnRowEditing セットMyGridView.EditIndex = e.NewEditIndex;
とその他のいくつかの小さなタスク。名前フィールドを編集して空白にします。クリックしてその行に保存します。適切なメッセージが検証の概要とともに上部に表示されます。その行で [キャンセル] をクリックします。何も起こりません。任意の場所で他のボタンをクリックします (並べ替え、ページ、別の行での編集など)。何も起こりません。
すべてのフィールドが有効である限り、すべてが機能します。また、無効な送信の後、編集フィールドに入力することは可能ですが、結果は変わりません。
さまざまなイベント ハンドラー (つまり、OnRowCancelingEdit、OnRowCommand、OnRowDeleting など) のブレーク ポイントは、コード ビハインドへの呼び出しがないことを示しています。
GridView が UpdatePanel 内にない場合、すべてが期待どおりに機能します。ただし、ページが「点滅」したり、すべてのページ、並べ替え、または編集が行われたりしないように、これらを UpdatePanel に含めることが望ましいです。
試したこと:
- UpdatePanel の UpdateMode を Always と Conditional の両方に変更します。
- ChildrenAsTriggers の削除