典型情况:
在我的GridView控件中,我有一个页脚行,其中包含一个文本框和一个“添加”按钮。按下按钮时,在TextBox中输入的文本将添加到网格中。我还有一个验证控件,要求在按下按钮时,已在TextBox中输入该文本。添加新行后,文本框将清除,以便轻松输入下一个项目。
用户还可以通过单击编辑LinkButton来编辑先前输入的行中的文本,这会将行置于编辑模式。单击Update LinkButton会提交更改。
问题:
当我单击Update链接提交更改时,如果尚未在Footer行的TextBox(用于添加新条目的行)中输入文本,则验证控件将返回“Entry Required”错误。如果按下Add按钮,它应该只需要一个条目,而不是在按下Update LinkButton时。
似乎服务器端验证控件的验证事件在GridView的RowCommand事件或btnAdd_Click事件之前触发,所以我想知道如何从服务器,我可以确定哪个事件触发了回发,以便我可以确定是否应该进行哪些编辑在特定情况下执行。
我正在使用客户端“必需”验证编辑以及更复杂的服务器端。由于我可能需要进行一些服务器端验证,所以我很高兴知道如何处理服务器端验证,但实际上,知道如何处理客户端验证的这种情况也会有所帮助。
感谢。
答案 0 :(得分:3)
将CommandField转换为TemplateField,并在EditItemTemplate中,将Update LinkButton的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>