服务器端验证无效。

时间:2014-03-24 04:17:52

标签: c# asp.net validation server-side code-behind

当我在向导控件的第二步中单击下一个按钮时,我正在尝试进行服务器端验证。

当我点击下一个按钮时,我的验证似乎显示我的两个文本框是有效的,但是,无论如何它都会跳到下一步。手机和邮政编码都是必需的。

需要检查注释框以确保它不包含超过200个值。当我的两个验证控件无效时,我无法弄清楚为什么它会进入下一步。

下面是我的这些twp文本框的验证控件的代码,以及我单击下一个按钮时代码的代码。此代码适用于向导的第一步。以下是该站点的链接,以便您了解会发生什么。 http://scort323.csweb.kutztown.edu/Assign3/assign3.aspx

    <tr>
        <td>
            <asp:Label ID="LabelPhone" runat="server" Text="*Phone:" CssClass="LabelText"></asp:Label>
        </td>
        <td>
            <asp:TextBox ID="TextBoxPhone" runat="server" CssClass="TextBox"></asp:TextBox>
        </td>
        <td>
            <asp:RequiredFieldValidator ID="phoneRequiredFieldValidator" runat="server" ErrorMessage="Please enter your phone number."
                CssClass="errorMessage" ControlToValidate="TextBoxPhone" Text="*" SetFocusOnError="true"
                Display="Dynamic" ValidationGroup="infoGroup"></asp:RequiredFieldValidator>
            <asp:RegularExpressionValidator ID="phoneRegularExpressionValidator" runat="server"
                ErrorMessage="Please enter a valid phone number(xxx-xxx-xxxx)." ControlToValidate="TextBoxPhone"
                ValidationExpression="\d{3}-\d{3}-\d{4}" Text="*" CssClass="errorMessage" SetFocusOnError="true"
                Display="Dynamic" ValidationGroup="infoGroup"></asp:RegularExpressionValidator>
        </td>
    </tr>
    <tr>
        <td>
            <asp:Label ID="LabelZip" runat="server" Text="*Zip Code:" CssClass="LabelText"></asp:Label>
        </td>
        <td>
            <asp:TextBox ID="TextBoxZip" runat="server" CssClass="TextBox"></asp:TextBox>
        </td>
        <td>
            <asp:RequiredFieldValidator ID="zipRequiredFieldValidator" runat="server" ErrorMessage="Please enter your zip code."
                CssClass="errorMessage" ControlToValidate="TextBoxZip" Text="*" SetFocusOnError="true"
                Display="Dynamic" ValidationGroup="infoGroup"></asp:RequiredFieldValidator>
            <asp:RegularExpressionValidator ID="zipRegularExpressionValidator" runat="server"
                ErrorMessage="Please enter a valid zip code(5 digits)." ControlToValidate="TextBoxZip"
                ValidationExpression="\d{5}" Text="*" CssClass="errorMessage" SetFocusOnError="true"
                Display="Dynamic" ValidationGroup="infoGroup"></asp:RegularExpressionValidator>
        </td>
    </tr>

protected void Wizard1_NextButtonClick(object sender,WizardNavigationEventArgs e)
{
    int index = Wizard1.ActiveStepIndex;
    int length = TextBoxComments.Text.Length;
    Page.Validate("infoGroup");
    if(index == 1)
    {
        if (Page.IsValid)
        {
            if (length <= 200)
            {
                Wizard1.ActiveStepIndex = index + 1;
            }
            else
            {
                Wizard1.ActiveStepIndex = index;
            }
        }
        Wizard1.ActiveStepIndex = index +1;
    }
    else
    {
        if (Page.IsValid)
        {
            Wizard1.ActiveStepIndex = index + 1;
        }
        else
        {
            Wizard1.ActiveStepIndex = index;
        }
    }
}

3 个答案:

答案 0 :(得分:0)

此步骤应位于检查页面有效性的if条件内。不是吗?

Wizard1.ActiveStepIndex = index +1;

或者它应该是:

 if (Page.IsValid)
    {
        if (length <= 200)
        {
            Wizard1.ActiveStepIndex = index + 1;
        }
        else
        {
            Wizard1.ActiveStepIndex = index;
        }

    }
    Wizard1.ActiveStepIndex = index;

答案 1 :(得分:0)

尝试取消下一次按钮单击,直到验证向导。

protected void Wizard1_NextButtonClick(object sender, WizardNavigationEventArgs e)
  {
    e.Cancel = !ValidateWizardStep(e.NextStepIndex);
  }

答案 2 :(得分:0)

尝试使用jQuery或JavaScript进行验证。我认为它比服务器端验证更好。

总是尝试在客户端进行验证,因为它为您提供了更好的性能,兼容性和许多良好的灵活功能