【问题标题】:Using Validation controls with a GridView将验证控件与 GridView 一起使用
【发布时间】:2009-12-13 18:30:24
【问题描述】:

典型情况:

在我的 GridView 控件中,我有一个页脚行,其中包含一个文本框和一个“添加”按钮。按下按钮时,在 TextBox 中输入的文本将添加到网格中。我还有一个验证控件,要求当按下按钮时,该文本已输入到 TextBox 中。添加新行后,文本框清晰,便于输入下一项。

用户还可以通过单击编辑链接按钮来编辑先前输入的行中的文本,这会将行置于编辑模式。单击更新链接按钮会提交更改。

问题:

当我单击更新链接提交更改时,如果尚未在页脚行的文本框(用于添加新条目的行)中输入文本,验证控件将返回“需要输入”错误。它应该只在按下 Add 按钮时才需要一个条目,而不是在按下 Update LinkBut​​ton 时。

似乎服务器端验证控件的验证事件在 GridView 的 RowCommand 事件或 btnAdd_Click 事件之前触发,所以我想知道如何从服务器确定触发回发的事件,以便确定是否应该进行哪些编辑在给定的情况下执行。

我混合使用客户端“必需”验证编辑以及更复杂的服务器端。由于我可能必须进行一些服务器端验证,我会很高兴知道如何处理服务器端验证,但实际上,知道如何处理这种情况以进行客户端验证也会有所帮助。

谢谢。

【问题讨论】:

    标签: asp.net gridview


    【解决方案1】:

    将您的 CommandField 转换为 TemplateField,并在 EditItemTemplate 中,将 Update LinkBut​​ton 的 CausesValidation 属性更改为 false。

    更新

    转换为 TemplateField 很简单,不需要任何代码更改(只需标记):

    在标记中将 CausesValidation 属性更改为 false 也很简单:

    <asp:TemplateField ShowHeader="False">
      <EditItemTemplate>
        <asp:LinkButton ID="lnkUpdate" runat="server" CausesValidation="False"
          CommandName="Update" Text="Update"></asp:LinkButton>
        <%--
          More controls
        --%>
      </EditItemTemplate>
      <ItemTemplate>
        <%--
          Controls
        --%>
      </ItemTemplate>
    </asp:TemplateField>
    

    现在,如果您希望单独验证页脚和数据行,则需要使用验证组,这在Microsoft's documentation 中有说明。同一验证组中的所有控件都将其 ValidationGroup 属性设置为相同的值,如下所示:

    <asp:LinkButton ID="lnkUpdate" runat="server" CausesValidation="True"
      CommandName="Update" Text="Update" ValidationGroup="GridViewDataRowGroup">
    </asp:LinkButton>
    

    【讨论】:

    • 我只是想学习 GridView 控件,但这似乎是一个激烈的步骤,会导致转换大量编写的代码。我会尝试,同时希望另一个答案。
    • 我猜这是说我可以对页脚行或数据行使用验证控件,但不能同时使用两者。
    • 您可能需要验证组。请查看我的更新答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 2014-04-23
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 2012-02-18
    相关资源
    最近更新 更多