【问题标题】:button in gridview triggers all validators when it should notgridview 中的按钮在不应该触发所有验证器时触发
【发布时间】:2012-04-26 15:47:43
【问题描述】:

首先让我说我知道如何使用CausesValidationValidationGroup。我有一个奇怪的情况,我有一个 Ajax Tab 容器。每个选项卡都有一个网格视图,并且在网格视图中生成的行都有一个 TemplateField 包含一个“添加”按钮。 gridview 和 tab 容器中的按钮都使用ValidationGroup 以防止任何交叉污染,并且所有“添加”按钮都设置为CausesValidation = "false"

我刚刚添加了最后一个 gridview 并且“添加”按钮触发了页面上的所有验证器。再次将“添加”按钮设置为CausesValidation = "false",因此没有理由让它以这种方式运行。我什至在前端和后面的代码中设置了这个值。

对于尝试,我尝试了以下链接中的建议:"Solution 1""Solution 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 另一个有趣的花絮。如果我将OnClientClick="alert(Page_IsValid)" 放在我的添加按钮上,它会返回true,即使触发了其他选项卡中的验证器。如果我再次单击该按钮,它会返回 false 并且我的代码隐藏失败,就好像页面发回但跳过了 OnDataBound 方法

【问题讨论】:

  • 能否请您发布您的代码以便更好地理解?
  • 请使用gist.github.com 发布您的代码,并提供使用此代码sn-p 不够的链接。

标签: c# asp.net gridview validation


【解决方案1】:

我最终通过用空行预加载gridview 解决了这个问题。不知道为什么这解决了问题,但确实如此。

【讨论】:

    猜你喜欢
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 2018-08-23
    相关资源
    最近更新 更多