0

コードの抜粋:

<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 の削除
4

1 に答える 1

0

私はこれに対する答えをSO以外の誰かから得ました。これを自分の答えとして主張するのは気まずいです。しかし、それが他の人に役立つなら、私はここにそれを提示すべきだと感じています.

すべてのバリデーターとサマリーを に入れ、ValidationGroupすべてのリンクとボタンを に設定する必要がありましたCausesValidation="false"。次に、コード ビハインドで、適切なメソッドの先頭で、失敗した場合はPage.Validate("groupName")すぐに and を呼び出しreturn;ます。これにより、 を再設定するポストバックが強制されますUpdatePanel

于 2013-01-30T20:19:39.093 に答える