0

まず、使い方を知っていると言ってみましょCausesValidationValidationGroup。AjaxTabコンテナーを持っているという奇妙な状況があります。各タブにはグリッドビューがあり、グリッドビューで生成される行にはすべてTemplateField「追加」ボタンが含まれています。グリッドビューとタブコンテナValidationGroupのボタンはすべて、相互汚染を防ぐために使用され、すべての[追加]ボタンは次のように設定されています。CausesValidation = "false"

最後のグリッドビューを追加したところ、[追加]ボタンでページ上のすべてのバリデーターがトリガーされます。もう一度、[追加]ボタンが設定されてCausesValidation = "false"いるため、このように動作する理由はありません。この値をフロントエンドとコードビハインドで設定しました。

試みのために、私はこれらのリンクの提案を試しました:「ソリューション1」「ソリューション2」

他の誰かがこれに出くわし、解決策を見つけましたか?

コードのリクエストを編集:コンテナ全体がほぼ500行であるため、問題のタブパネルのみを投稿します

<asp:TabPanel ID="tab_Browse" runat="server" HeaderText="Browse">
            <ContentTemplate>
                <table id="browseTable">
                    <tr>
                        <td>Category</td>
                        <td>
                            <asp:DropDownList ID="browseDDL" runat="server" AppendDataBoundItems="True">
                                <asp:ListItem Text="All categories" Value="999"></asp:ListItem>
                            </asp:DropDownList>
                        </td>
                        <td>
                            <asp:Button ID="btnBrowse" runat="server" Text="Browse" ValidationGroup="vgBrowse" OnClick="btnBrowse_Click" />
                        </td>
                    </tr>
                </table>
                <asp:GridView ID="gvBrowse" runat="server" AutoGenerateColumns="false" AllowPaging="true" PageSize="8"
                    OnPageIndexChanging="gvBrowse_PageIndexChanging" DataKeyNames="foodId"
                    OnRowDataBound="gvBrowse_RowDataBound" Width="790px">
                    <Columns>
                        <asp:TemplateField HeaderText="Food ID" Visible="false">
                            <ItemTemplate>
                                <%# Eval("foodId") %>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Description">
                            <ItemTemplate>
                                <%# Eval("Shrt_Desc") %> (100g)
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Calories" ItemStyle-Width="50px">
                            <ItemTemplate>
                                <%# Eval("cals") %>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Fat Grams" ItemStyle-Width="75px">
                            <ItemTemplate>
                                <%# Eval("fat") %>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Carbs" ItemStyle-Width="50px">
                            <ItemTemplate>
                                <%# Eval("carbs") %>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField ItemStyle-Width="110px">
                            <ItemTemplate>
                                <asp:Button ID="browseAdd" runat="server" CausesValidation="false" Text="Add to meal" CommandArgument="Standard" OnClick="showingEntry" />
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                    <RowStyle CssClass="gvRowStyle" />
                    <HeaderStyle CssClass="gvHeader" />
                    <AlternatingRowStyle CssClass="altRow" />
                </asp:GridView>
            </ContentTemplate>
        </asp:TabPanel>

編集2もう1つの興味深い一口。OnClientClick="alert(Page_IsValid)"追加ボタンを押すとtrue、他のタブのバリデーターがトリガーされても戻ります。ボタンをもう一度クリックすると、ボタンが戻りfalse、ページがポストバックされたかのようにコードビハインドが失敗しますが、OnDataBoundメソッドをスキップします

4

1 に答える 1

0

gridviewに空の行をプリロードすることで、この問題を解決することになりました。これで問題が解決した理由はわかりませんが、解決します。

于 2012-05-18T15:13:36.520 に答える