使用带有GridView的验证控件

时间:2009-12-13 18:30:24

标签: asp.net gridview

典型情况:

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

用户还可以通过单击编辑LinkBut​​ton来编辑先前输入的行中的文本,这会将行置于编辑模式。单击Update LinkBut​​ton会提交更改。

问题:

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

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

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

感谢。

1 个答案:

答案 0 :(得分:3)

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

<强>更新

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

alt text

在标记中将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>