まず、使い方を知っていると言ってみましょCausesValidation
うValidationGroup
。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
メソッドをスキップします