没有客户端点击事件的单个按钮中的两个验证组

时间:2010-02-24 09:02:06

标签: asp.net validation customvalidator

在多重网格中,我正在验证日期和金额等两个控件。当我按下tabevent时它正确验证。当我按下保存按钮时,它没有验证。我正在使用两个验证组和两个验证摘要。然后在保存按钮Ialso尝试使用javascript onclientclick()函数它工作正常,但如果我在日期和金额记录中给出正确的值,它不会保存。怎么过来这个。

日期

 <asp:TemplateField HeaderText="Date">
                                                        <ItemTemplate>
                                                            <asp:TextBox ID="txtDate" Text='<%# Bind("AD_REF_DATE") %>' runat="server" CausesValidation="true"
                                                                ValidationGroup="group" Width="80px" AutoPostBack="true" OnTextChanged="txtDate_TextChanged"></asp:TextBox>
                                                        </ItemTemplate>
                                                    </asp:TemplateField>
                                                    <asp:TemplateField>
                                                        <ItemTemplate>
                                                            <asp:CompareValidator ID="dateValidater" runat="server" ControlToValidate="txtDate"
                                                                Operator="DataTypeCheck" Type="Date" ValidationGroup="group" EnableClientScript="true"
                                                                ErrorMessage="Please enter a valid date (mm/dd/yyyy)." SetFocusOnError="true" Display="None">*</asp:CompareValidator>
                                                        </ItemTemplate>
                                                    </asp:TemplateField>

<asp:TemplateField HeaderText="Amount">
                                                        <ItemTemplate>
                                                            <asp:TextBox ID="txtAmount" MaxLength="17" Text='<%# Bind("AD_AMOUNT") %>' CausesValidation="true"
                                                                ValidationGroup="req" runat="server" AutoPostBack="true">
                                                            </asp:TextBox>
                                                        </ItemTemplate>
                                                    </asp:TemplateField>
                                                    <asp:TemplateField>
                                                        <ItemTemplate>
                                                            <asp:RegularExpressionValidator ID="regVal1" runat="server" ControlToValidate="txtAmount"
                                                                ErrorMessage="Format(13int,5deci)" ValidationExpression="^[1-9]\d{0,12}(\.\d{1,2})?%?$"
                                                                ValidationGroup="req" Display="None"  EnableClientScript="true" SetFocusOnError="true">
                                                            </asp:RegularExpressionValidator>
                                                        </ItemTemplate>
                                                    </asp:TemplateField>

验证摘要:

 <asp:ValidationSummary ID="ValidationSummary3" runat="server" ValidationGroup="req"
                            HeaderText="Amount:Invalid Format" DisplayMode="BulletList" ShowMessageBox="true"
                            ShowSummary="false" />
                        <asp:ValidationSummary ID="ValidationSummary1" runat="server" ValidationGroup="group"
                            HeaderText="Date:Invalid Format" DisplayMode="BulletList"  ShowMessageBox="true" 
                            ShowSummary="false" />

按钮保存:

 <asp:Button ID="ButtonSave" runat="server"  CssClass="button" CausesValidation="true" Text="<%$Resources:TJFAS501, ButtonSave %>"
                                            OnClick="ButtonSave_Click" TabIndex="6" />

如何在按钮中验证这个,还应该显示两个弹出框?

2 个答案:

答案 0 :(得分:3)

您可能希望尝试通过按钮OnClientClick手动触发两个组的验证功能,因为您需要验证两个验证组。目前您的验证未触发,因为您没有为您的按钮分配任何ValidationGroup,因此它只是在寻找没有定义ValidationGroup的验证器(您的组是:group和req)。

您可以通过javascript调用Page_ClientValidate()手动触发验证检查(确保将按钮上的CauseValidation设置为false)并且它有一个可选参数,可以获取验证组。

<asp:Button ID="yourButton" runat="server" OnClick="ButtonSave_Click"
    CausesValidation="false" TabIndex="6"
    OnClientClick="return (Page_ClientValidate('group') && Page_ClientValidate('req'));" />

您可以在MSDN上详细了解Page_ClientValidate

为每个动作(例如你的按钮)设置一个验证组会更容易,但我认为你出于某种原因需要两个组。

答案 1 :(得分:0)

试试这个..

 <script type="text/javascript">
        function Validate() {
            var isValid = false;
            isValid = Page_ClientValidate('Group1');
            if (isValid) {
                isValid = Page_ClientValidate('Group2');
            } 
            return isValid;
        }
    </script>